awk prepend и добавление строки файла - PullRequest
0 голосов
/ 19 октября 2019

Я хочу добавить и добавить определенную строку файла с помощью awk.

Пример:

Скажем, у меня есть файл с 5 строками, я хочу, чтобы awk 3-й строки и поставить«привет» в начале и «до свидания» в конце.

файл примера.

1. foo
2. foo
3. foo
4. foo
5. foo

вывод результата hello 3. foo goodbye и удаление всех остальных строк 1, 2, 4, 5,

Я пытался awk 'NR==3 {print $0" goodbye"}' <file>

, это добавляет строку до свидания, но я не могу понять, как добавить строку с "привет"

Я пытался НАЧАТЬ и КОНЕЦ вкоманда, но не знаете, как обработать NR == 3?

Желаемый результат должен быть ..

hello 3. foo goodbye

конечный результат вывода hello 3. foo goodbye и удалить все остальные строки 1, 2, 4, 5,

Ответы [ 2 ]

3 голосов
/ 19 октября 2019

Не могли бы вы попробовать следующее. Для печати всех строк только 3-я строка с дополнительными сведениями.

awk 'FNR==3{print "hello " $0 " goodbye";next} 1' Input_file

ИЛИ

awk 'FNR==3{$0="hello " $0 " goodbye"} 1'  Input_file

В случаеВы хотите напечатать только 3-ю отредактированную строку, попробуйте:

awk 'FNR==3{print "hello " $0 " goodbye"}' Input_file


Если вы хотите напечатать только 3-ю строку с использованием BEGIN и ENDв соответствии с вашей попыткой, затем попробуйте следующее.

awk 'BEGIN{ORS=" ";printf "hello "} FNR==3; END{printf("%s\n","goodbye")}' Input_file
2 голосов
/ 19 октября 2019

В вашем случае проще перейти с помощью sed подстановки команд (кроме того, sed позволяет изменить файл на месте: в основном с опцией -i):

$ sed '3 s/.*/hello & goodbye/' file
1. foo
2. foo
hello 3. foo goodbye
4. foo
5. foo
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...