Команда AWK, выполняемая с ошибкой, но не изменением файла

Я применяю команду awk на файл, но этот файл не изменяет. кто-либо может предложить, почему это происходит?

awk 'BEGIN{FS=OFS=""}; {if($692=="6") sub($690,"9");print $0;}' abc.txt >efg.txt

Примечание: каждая строка содержит приблизительно 1 000 символов.

1
задан 26 May 2017 в 10:43

1 ответ

Что не так

Ключевой вопрос - то, что Вы используете sub() неправильно. sub() как предполагается, занимает место на основе соответствия шаблона (это - важная часть!). Правильный синтаксис:

sub(regular_expression,replacement,substring)

То, что Вы делаете, sub($692,"9"), таким образом, Вы говорите этому заменять первое вхождение того же самого, которое Вы видите в поле номер 692, но что первое вхождение может быть путем путем путь прежде в строке.

Вот пример:

$ echo "1253456" | awk 'BEGIN{FS=OFS=""};{if($4==3) sub($6,"@");print}'                                                                               
12@3456

Это буквально берет то, что в 6-м поле (который является номером 5) и удаляет первое вхождение той вещи. То же как, что делала Ваша команда.

Что должно на самом деле быть сделано

Для замены определенного поля Вам не нужно sub(), просто присвойте полю непосредственно.

awk 'BEGIN{FS=OFS=""}; {if($692==6) $690="9";print}' abc.txt >efg.txt

Заметьте, что я также удалил $0 от print потому что вызов print самостоятельно уже принимает $0 по умолчанию

0
ответ дан 8 December 2019 в 05:15

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

Похожие вопросы: