Linux 如何删除文件中重复出现的内容?

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

我是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/{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编程的好教程吗?你为什么不谷歌一下呢: