Вставьте пустую строку после указанного ключевого слова c в файле - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть файл, содержащий строки

0.00  600.00  2214.28   785.71 1.00000 SEDS1-BOTTOM
0.00  600.00  2214.28   785.71 1.00000 SEDS1-TOP
0.00  600.00  1500.00     0.00 1.00000 WATER-BOTTOM
0.00  600.00  3446.97  1757.08 1.00000 SEDS2-TOP
0.00  600.00  2218.64   790.51 1.00000 SEDS1-BOTTOM
0.00  600.00  2218.64   790.51 1.00000 SEDS1-TOP
0.00    0.00  600.00  1500.00  1.00000 WATER-BOTTOM
0.00  600.00  3446.97  1757.08 1.00000 SEDS2-TOP
0.00  600.00  1500.00     0.00 1.00000 WATER-BOTTOM
0.00  600.00  3446.97  1757.08 1.00000 SEDS2-TOP

Мой выходной файл должен иметь строку Blant после WATER-BOTTOM, как указано ниже

0.00  600.00  2214.28   785.71 1.00000 SEDS1-BOTTOM
0.00  600.00  2214.28   785.71 1.00000 SEDS1-TOP
0.00  600.00  1500.00     0.00 1.00000 WATER-BOTTOM

0.00  600.00  3446.97  1757.08 1.00000 SEDS2-TOP
0.00  600.00  2218.64   790.51 1.00000 SEDS1-BOTTOM
0.00  600.00  2218.64   790.51 1.00000 SEDS1-TOP
0.00    0.00  600.00  1500.00  1.00000 WATER-BOTTOM

0.00  600.00  3446.97  1757.08 1.00000 SEDS2-TOP
0.00  600.00  1500.00     0.00 1.00000 WATER-BOTTOM

0.00  600.00  3446.97  1757.08 1.00000 SEDS2-TOP

Ответы [ 4 ]

1 голос
/ 28 февраля 2020

Не могли бы вы попробовать следующее.

awk '1;/WATER-BOTTOM/{print ""}'  Input_file

Объяснение:

1: 1 выполняет условие для awk и здесь выводятся строки (все строки файла Input_file).

;/WATER-BOTTOM/: ; отделяет 1 от /WATER-BOTTOM/. /WATER-BOTTOM/ означает проверку условия, если строка содержит строку, затем выполните действие, упомянутое внутри {...}, следующего за ней.

{print ""}: печать значения NULL здесь, что приведет к печати новой строки, если строка содержит строку WATER-BOTTOM.

0 голосов
/ 28 февраля 2020

Альтернативная команда sed может быть sed с использованием функции добавления.

cat test.txt | sed '/WATER-BOTTOM$/a'

'i' вместо 'a' вставит пустые строки выше вместо ниже.

Для второго ответа от Bohemian , Дно Воды в месте замены можно пропустить, используя вместо этого символ ' & ':

cat myfile | sed 's/WATER-BOTTOM$/&\n/'
0 голосов
/ 28 февраля 2020

ИМО, это самый чистый с awk:

awk '{print} $NF ~ /WATER-BOTTOM/{print ""}' input

или

awk '{printf "%s\n%s", $0, $NF ~ /WATER-BOTTOM/ ? "\n" : ""}' input
0 голосов
/ 28 февраля 2020

Сырой, но эффективный:

cat myfile | sed 's/WATER-BOTTOM/WATER-BOTTOM\n/' > myfile
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...