Я применяю команду awk на файл, но этот файл не изменяет. кто-либо может предложить, почему это происходит?
awk 'BEGIN{FS=OFS=""}; {if($692=="6") sub($690,"9");print $0;}' abc.txt >efg.txt
Примечание: каждая строка содержит приблизительно 1 000 символов.
Ключевой вопрос - то, что Вы используете 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
по умолчанию