如何删除重复的段落

如何删除重复的段落

给定一个包含段落的文件(由空行分隔的行组)。确保保留等效段落内的换行符。有没有办法uniq删除重复的段落?

我想可以将每个段落序列化为一行,执行uniq并反序列化结果,是否有更好的解决方案?

输入:

Paragraph1
continue
continue

...

Paragraph2
continue
continue

...

Paragraph1
continue
continue

...

Paragraph2
continue
continue

期望的输出:只有一个Paragraph1和Paragraph2。

命令行解决方案会更好。

答案1

查看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为假。

答案2

$ awk -v RS= -v ORS='\n\n' '!seen[$0]++' file
Paragraph1
continue
continue

...

Paragraph2
continue
continue

相关内容