qlw*_*wik 4 linux awk text-manipulation uniq
如何使用任何 linux 程序链接 sed、awk 或任何其他程序从文本文件中删除非重复行?
例子:
abc
bbc
abc
bbc
ccc
bbc
Run Code Online (Sandbox Code Playgroud)
结果:
abc
bbc
abc
bbc
bbc
Run Code Online (Sandbox Code Playgroud)
第二个列表已删除 ccc,因为它没有重复的行。
是否也可以删除只有 2 个重复行的非重复 AND 行,并留下那些有超过 2 个重复行的行?
Mar*_*iae 10
其他人发布的解决方案在我的 Debian Jessie 上不起作用:他们保留任何重复行的单个副本,而我对 OP 的理解是保留重复行的所有副本。如果我已经正确理解了 OP,那么...
以下命令
awk '!seen[$0]++' file
Run Code Online (Sandbox Code Playgroud)
删除所有重复的行。
以下命令
awk 'seen[$0]++' file
Run Code Online (Sandbox Code Playgroud)
输出所有副本,但不输出原始副本:即,如果一行出现n次,则输出该行n-1次。
然后命令
awk 'seen[$0]++' file > temp && awk '!seen[$0]++' file >> temp
Run Code Online (Sandbox Code Playgroud)
解决你的问题。这些行不是按原始顺序排列的。
如果你想要有两个或更多重复的行,你现在可以迭代上面的:
awk 'seen[$0]++' file | awk 'seen[$0]++' > temp
Run Code Online (Sandbox Code Playgroud)
保留n >1 个重复行的n-2 个副本。现在
awk '!seen[$0]++' temp > temp1
Run Code Online (Sandbox Code Playgroud)
从临时文件中删除所有重复的行,您现在可以获得您想要的内容(即只有n>1重复的行)如下:
cat temp1 >> temp; cat temp1 >> temp
Run Code Online (Sandbox Code Playgroud)如果您需要对出现N次或更多次的行执行此操作,请执行以下命令
awk 'seen[$0]++ && seen[$0] > N' file
Run Code Online (Sandbox Code Playgroud)
比将命令链接N次更简单awk 'seen[$0]++' file
。
小智 7
您可以为此使用sort
&命令。uniq
如果你的数据在 abc.txt 文件中,那么;
cat abc.txt |sort|uniq -d
Run Code Online (Sandbox Code Playgroud)
输出将是;
abc
bbc
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5133 次 |
最近记录: |