对不起,我不得不编辑我的示例,因为我没有正确表达我的查询。假设我有.txt文件:
Happy sad
Happy sad
Happy sad
Sad happy
Happy sad
Happy sad
Mad sad
Mad happy
Mad happy
我想删除任何唯一的字符串。将文件保留为:
Happy sad
Happy sad
Happy sad
Happy sad
Happy sad
Mad happy
Mad happy
我知道排序可以消除重复项(sort file.txt | uniq
),所以无论如何,我们可以使用命令在bash中执行相反的操作吗?还是我只需要找出一个while循环?BTWuniq -D file.txt > output.txt
不起作用。
使用awk
:
$ awk 'seen[$0]++; seen[$0] == 2' file
Happy sad
Happy sad
Happy sad
Happy sad
Happy sad
Mad happy
Mad happy
这将每一行的文本用作关联数组的键seen
。第一个seen[$0]++
将导致打印之前已看到的行,因为与该行关联的值在第二个及以后的时间中将不为零。将seen[$0] == 2
导致重新打印的行,如果是这样的线已经看到了第二次(不这样做,你会错过每一个重复的行出现一次)。
这与awk '!seen[$0]++'
有时用于删除重复项而不进行排序的问题有关(请参见awk'!a [$ 0] ++'的工作原理?)。
要仅获得重复行的一个副本,请执行以下操作:
awk 'seen[$0]++ == 1' file
或者,
sort file | uniq -d
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句