Linux 将重复值重定向到新文件
我有一个abc.log文件,其中包含如下文件名Linux 将重复值重定向到新文件,linux,bash,shell,Linux,Bash,Shell,我有一个abc.log文件,其中包含如下文件名 cat abc.log > a.arc a.arc b.arc c.arc c.arc d.arc e.arc e.arc f.arc 我需要一个shell脚本来扫描abc.log文件,并只将重复的值重定向到def.log 要求: cat def.log > a.arc c.arc e.arc
cat abc.log
>
a.arc
a.arc
b.arc
c.arc
c.arc
d.arc
e.arc
e.arc
f.arc
我需要一个shell脚本来扫描abc.log文件,并只将重复的值重定向到def.log
要求:
cat def.log
>
a.arc
c.arc
e.arc
/*only the duplicate values in abc.log*/
编辑:
有什么建议吗
提前感谢使用
uniq-d
uniq -d abc.log > def.log
请注意,在您的问题中,第2行有一个尾随空格,但第1行没有,这使得uniq
将它们视为不同的
对于未排序的输入:
sort abc.log | uniq -d > def.log
@timrau的答案比这更好:
awk '++seen[$0] == 2' in > out
这里唯一的优点是输入不需要排序。您能为未排序的输入提供解决方案吗scenario@NaveenReddy为未排序的输入编辑Hanks正在abc中寻找未排序内容的解决方案。Log如果重复计数为2或3怎么办awk@user3186568即使有更多的重复,此awk命令仅在第二次到达复制行时打印该行。因此,它仍然适用于超过2的复制。仅从示例中,$1应该更好,这将避免空白问题。
awk '++seen[$0] == 2' in > out