Предположим, вы хотите заменить строку 4 текстом «другой». Вы можете использовать AWK так:
awk '{ if (NR == 4) print "different"; else print $0}' input_file.txt > output_file.txt
AWK считает входные данные «записями», разделенными на «поля». По умолчанию одна строка - одна запись. NR
количество увиденных записей. $0
представляет текущую полную запись (хотя $1
это первое поле в записи и т. д .; по умолчанию поля представляют собой слова из строки).
Таким образом, если текущий номер строки равен 4, выведите строку «Другой», но в противном случае выведите строку без изменений.
В AWK код программы заключен в { }
запускается один раз для каждой входной записи.
Вы должны заключить в кавычки программу AWK, чтобы оболочка не пыталась интерпретировать такие вещи, как $0
.
РЕДАКТИРОВАТЬ: более короткая и элегантная программа AWK от @chepner в комментариях ниже:
awk 'NR==4 {$0="different"} { print }' input_file.txt
Только для записи (т. Е. Строки) номер 4, замените всю запись на строку «разные». Затем для каждой входной записи распечатайте запись.
Ясно, что мои навыки AWK ржавые! Спасибо, @chepner.
РЕДАКТИРОВАТЬ: и увидеть также еще более короткую версию от @Dennis Williamson:
awk 'NR==4 {$0="different"} 1' input_file.txt
Как это работает, объясняется в комментариях: 1
всегда оценивается как true, поэтому всегда выполняется связанный блок кода. Но нет никакого связанного блока кода, что означает, что AWK выполняет свое действие по умолчанию просто печати всей строки. AWK предназначен для кратких программ, подобных этой.