Как удалить повторяющиеся абзацы

Awkраствор:

awk 'NF == 1{ f=1; exit }END{ print "Hostname list is "(f? "not ":"")"valid" }' file
1
17.09.2020, 02:28
2 ответа

Глядя на документацию awk, кажется, что я мог бы использовать следующее:

cat file.txt | awk 'BEGIN { RS = "\n\n+"; first = 1 } {if (!x[$0]++) { if (!first) {print ""}; print $0; first = 0} }'

Краткое пояснение:

  • Мы устанавливаем разделитель записей RSна "\n\n+" для разделения абзацев.
  • Переменная firstиспользуется для вывода новой строки между записями, в качестве альтернативы вы можете печатать новую строку после каждого $0, но тогда у меня не было возможности удалить ее для последней записи.
  • Карта xиспользуется для подсчета того, была ли запись видна ранее, и только если она не была видна, мы печатаем запись.
  • Если это не запись first, мы печатаем новую строку между записями
  • Распечатать запись.
  • Установите для параметра firstзначение False.
1
18.03.2021, 23:04
$ awk -v RS= -v ORS='\n\n' '!seen[$0]++' file
Paragraph1
continue
continue

...

Paragraph2
continue
continue
2
18.03.2021, 23:04

Теги

Похожие вопросы