Удаление дублирующихся пустых строк с помощью awk - PullRequest
4 голосов
/ 05 апреля 2020

Для одной из моих проблем в классе, у меня есть файл, в котором я должен удалить дубликаты пустых строк в файле. так, например, у меня есть входной файл, который выглядит следующим образом:

Sample Line 1



Sample line 2

Sample line 3

, и результат будет превращать все несколько пустых строк в единственную, поэтому выходной файл будет выглядеть следующим образом:

Sample Line 1

Sample line 2

Sample line 3

Мне удалось выполнить это с помощью команды sed, но проблема состоит в том, что я использую awk для получения этого вывода. Самое близкое, что я получил, было с awk '!x[$0]++', но это просто удаляет почти все пустые строки. Я чувствую, что мне чего-то не хватает, просто c.

Спасибо за любую помощь!

Ответы [ 3 ]

4 голосов
/ 05 апреля 2020
$ awk 'NF{c=1} (c++)<3' file
Sample Line 1

Sample line 2

Sample line 3

или если вы не возражаете против лишней пустой строки в конце:

$ awk -v RS= -v ORS='\n\n' '1' file
Sample Line 1

Sample line 2

Sample line 3
4 голосов
/ 05 апреля 2020

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

awk '!NF{found++} found>1 && !NF{next} NF{found=""} 1'  Input_file

Вывод будет следующим.

Sample Line 1

Sample line 2

Sample line 3
1 голос
/ 05 апреля 2020

Это также работает, если в файле есть повторяющиеся строки в начале или конце.

awk '
NF==0{
    if (! blank) {print;blank=1}
    next
}
{blank=0;print}
' file

Основой для его работы является то, что NF равно нулю для каждой пустой / пустой строки с разделителем по умолчанию awk.


Например, если файл:



Sample Line 1



Sample line 2

Sample line 3
Sample line 4


, он становится


Sample Line 1

Sample line 2

Sample line 3
Sample line 4

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...