awk определить конец строки
Если строка в файле оканчивается на восклицательный или вопросительный знак,
то за этой строкой нужно добавить пустую строку. Как найти конец строки в awk?
С awk не приходилось иметь дело.
Мои попытки, но такой вариант не срабатывает:
$awk '/[!?]$/{ print $0"\n"}' file
Если файл записан так:
Why do they make so many mistakes?
A:So you’re Harry’s cousin?
B: Yes. That’s right.
То хотелось бы получить такое:
Why do they make so many mistakes?
A:So you’re Harry’s cousin?
B: Yes. That’s right.
Ответы (2 шт):
sed подойдёт?
$ sed -e 's/[!?]$/\0\n/' ./file.txt
Так-то через awk тоже можно, но сложнее:
$ awk '/[!?]$/ { print $0 "\n"; next; } { print; }' ./file.txt
$awk '/[!?]$/{ print $0"\n"}' file
в таком варианте строки, не удовлетворяющие условию [!?]$, вообще не будут напечатаны.
например, можно добавить вызов print вне условной констркции /.../{...}, а внутри этой конструкции не вызывать print, а изменять содержимое переменной $0:
$awk '/[!?]$/{ $0 = $0"\n" }; { print }' file