Обрезка пробелов Nawk с несколькими условиями

temp_file.txt

|112233456543214 |
|154233456873221|
|154233456868320|

Когда я использую приведенную ниже команду nawk, я увидел, что данные пропускаются, если у вас есть пустое пространство, поэтому мне нужно обрезать пустое пространство. Я должен включить обрезку пустого пространства в приведенную ниже команду (Знайте, чтобы использовать только команду nwak), это проблема. Вопрос, который я имею, состоит в том, как включить обрезку пробела в приведенной ниже команде

nawk -F '|' 'BEGIN{FS=OFS="|"}(length($2) >=13){
  $2=substr($2,1,6)"xxxxxx"substr($2,length($2)-3)}1' temp_file.txt>tmp.txt && mv tmp.txt temp_file.txt

2 ответа

Потому что первый символ - это труба, ваш $1 всегда будет пустой строкой. Вы хотите изучить $2 для ваших данных.

awk -F\| -v OFS=\| '{gsub(/(^[[:blank:]]+)|([[:blank:]]+$)/, "", $2)} 1' <<END
|112233456543214 |
|  154233456873221  |
| 154233456868320|
END
|112233456543214|
|154233456873221|
|154233456868320|

Если вы используете -FВам также не нужно определять FS в блоке BEGIN.


Если хотите, это прописано:

$ nawk -F '|' '
    BEGIN {OFS = FS}
    function obfuscate(string) {
        gsub(/(^[[:blank:]]+)|([[:blank:]]+$)/, "", string)
        return substr(string,1,6) "xxxxxx" substr(string,length(string)-3)
    }
    length($2) >= 13 {$2 = obfuscate($2) }
    1
' <<END
|112233456543214 |
|  154233456873221  |
|123456789012|
|1234567890123|
|12345678901234|
| 154233456868320|
END
|112233xxxxxx3214|
|154233xxxxxx3221|
|123456789012|
|123456xxxxxx0123|
|123456xxxxxx1234|
|154233xxxxxx8320|

nawk поддерживает регулярные выражения в определении FS, Вы можете использовать это, чтобы обрезать начальные и конечные пробелы или вкладки.

nawk -F '[[:blank:]]*[|][[:blank:]]*' 'BEGIN{OFS = "|"} (length($2) >= 13) {
    $2 = substr($2, 1, 6) "xxxxxx" substr($2, length($2) - 3)}1'

Труба окружена квадратными скобками, чтобы она не действовала как оператор чередования регулярных выражений. В регулярном выражении говорится, что в качестве разделителя полей используется комбинация из нуля или более пробелов (пробел или табуляция), за которыми следует символ канала, за которым следуют ноль или более пробелов.

Другие вопросы по тегам