gpt4 book ai didi

linux - 如何删除文件中的重复出现?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:40:02 24 4
gpt4 key购买 nike

我是 bash 编程的新手 (grep/uniq/sort/etc...),我在尝试从给定格式的文件中删除重复项时遇到问题

--
name: joe
tag: 123
--
name: mike
tag: 000
--
name: dave
tag: 123
--
name: loopy
tag: 123
--

基本上我想要的是删除文件中具有相同标签号的重复项,如下所示:

--
name: joe
tag: 123
--
name: mike
tag: 000
--

最佳答案

这个任务非常适合 awk。如果你有 gawk 或 mawk 可用,你可以通过适本地设置记录分隔符来完成它:

awk -v RS='--\n' -v ORS='--\n' '!h[$4]++' infile

输出:

--
name: joe
tag: 123
--
name: mike
tag: 000
--

这是通过记住哪些标签已被看到 (h[$4]++) 来实现的,即每条记录中的第四个元素。增量前面的爆炸 (!) 确保条件仅在 h[$4] 为零时为真,因此默认规则 ({ print $0 }) 仅在第一次看到标签时调用。

一个稍微短一点的版本:

awk '!h[$4]++' RS='--\n' ORS='--\n' infile

编辑 - 处理名称字段有空格的记录

如果名称字段有空格,字段计数会有所不同。您可以通过稍微不同地进行字段拆分来处理此问题:

awk '!h[$4]++' RS='--\n' ORS='--\n' FS='\n| *: *' infile

关于linux - 如何删除文件中的重复出现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14452979/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com