Припустимо, ви хочете замінити рядок 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
.
EDIT: Коротка та більш елегантна програма AWK від @chepner в коментарях нижче:
awk 'NR==4 {$0="different"} { print }' input_file.txt
Тільки для запису (тобто рядка) № 4 замініть весь запис рядком "інше". Потім для кожного вхідного запису надрукуйте запис.
Ясно мої навички AWK іржаві! Дякую, @chepner.
EDIT: і див. Ще більш коротку версію від @Dennis Williamson:
awk 'NR==4 {$0="different"} 1' input_file.txt
Як це працює, пояснюється в коментарях: 1
завжди оцінює істину, тому пов'язаний блок коду завжди працює. Але не існує асоційованого кодового блоку, а це означає, що AWK виконує за замовчуванням дію просто надрукувати весь рядок. AWK розроблений, щоб дозволити подібні програми.