Linux 如何删除文件中重复出现的内容?
我是bash编程新手(grep/uniq/sort/etc…),在尝试从给定格式的文件中删除重复项时遇到了问题Linux 如何删除文件中重复出现的内容?,linux,bash,grep,Linux,Bash,Grep,我是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'/name/{x=$0}/tag
--
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'/name/{x=$0}/tag/{a[$0]++;if(a[$0]awk'/name/{x=$0}/tag/{a[$0]++;if(a[$0]如果foobar是包含要删除重复项的行的文件:
awk '{ if (arry[$3]++ == 0) print $0; }' foobar
数组中的$3表示仅根据第3列中的值删除重复行。如果要删除整个重复行,请使用$0
以这种方式使用awk的另一个优点是不改变输入行的顺序(sort/uniq会这样做)。如果foobar是包含要删除重复行的文件:
awk '{ if (arry[$3]++ == 0) print $0; }' foobar
数组中的$3表示仅根据第3列中的值删除重复行。如果要删除整个重复行,请使用$0
以这种方式使用awk的另一个优点是不改变输入行的顺序(sort/uniq会这样做)。此任务非常适合awk。如果您有可用的gawk或mawk,可以通过适当设置记录分隔符来完成:
awk -v RS='--\n' -v ORS='--\n' '!h[$4]++' infile
输出:
--
name: joe
tag: 123
--
name: mike
tag: 000
--
这是通过记住看到了哪些标记(h[$4]+
)来实现的,即每个记录中的第四个元素。增量前面的bang(!
)确保只有当h[$4]
为零时条件才为真,因此只有在第一次看到标记时才会调用默认规则({print$0}
)
略短的版本:
awk '!h[$4]++' RS='--\n' ORS='--\n' infile
编辑-处理名称字段中有空格的记录
如果名称字段有空格,则字段计数会有所不同。您可以通过稍微不同的方式拆分字段来处理此问题:
awk '!h[$4]++' RS='--\n' ORS='--\n' FS='\n| *: *' infile
此任务非常适合awk。如果您有可用的gawk或mawk,可以通过适当设置记录分隔符来完成:
awk -v RS='--\n' -v ORS='--\n' '!h[$4]++' infile
输出:
--
name: joe
tag: 123
--
name: mike
tag: 000
--
这是通过记住看到了哪些标记(h[$4]+
)来实现的,即每个记录中的第四个元素。增量前面的bang(!
)确保只有当h[$4]
为零时条件才为真,因此只有在第一次看到标记时才会调用默认规则({print$0}
)
略短的版本:
awk '!h[$4]++' RS='--\n' ORS='--\n' infile
编辑-处理名称字段中有空格的记录
如果名称字段有空格,则字段计数会有所不同。您可以通过稍微不同的方式拆分字段来处理此问题:
awk '!h[$4]++' RS='--\n' ORS='--\n' FS='\n| *: *' infile
如果名称和标记是同一行,那很容易…我同意…但它们不是…你可以通过使用paste
或xargs
将它们放在同一行上,这将实现grep-v-file | xargs-n4 | sort-uk4
的技巧,但是输出不是所需的格式。@Thor回答最好在这里。如果名称和标记是same line,这很容易…我同意…但它们不是…你可以通过使用paste
或xargs
将它们放在同一行上,这将实现grep-v-file | xargs-n4 | sort-uk4
的技巧,但是输出不是所需的格式。@Thor回答最好在这里。嘿,谢谢!你能详细说明一下吗发生了什么事。看起来很疯狂!甜蜜的东西。你能推荐一些关于我可以从哪里开始bash编程的好教程吗?你为什么不谷歌一下呢:嘿,谢谢!你能详细介绍一下发生了什么事吗?看起来很疯狂!甜蜜的东西。你能推荐一些关于我可以从哪里开始bash编程的好教程吗?你为什么不谷歌一下呢: