我想在不使用排序命令的情况下将重复项重定向到另一个文件
I want to redirect the duplicates into another file without using sort command
我想在不使用排序命令的情况下将重复项重定向到另一个文件。
我试过使用以下命令,但没有用。
uniq -d sample.txt
它仅在我将其指定为“sort sample.txt | uniq -d
”时有效,但我想在不对文件进行排序的情况下取出文件的重复项。
还有其他方法吗?
您可以使用这个简单的 awk
命令完成它:
awk 'a[[=10=]]{print;next}{a[[=10=]]=1}' sample.txt
此处,[=13=]
=> 当前正在处理的完整行。如果 a[[=14=]]
已经设置,打印该行(这是重复的行)并继续到 next
行。否则 a[[=14=]]
已设置,因此下次同一行(如果存在)将被视为重复。
示例:
AMD$ cat sample.txt
Line 1
Line 2
Line 3
Line 1
Line 4
Line 5
Line 2
Line 6
Line 7
Line 7
Line 8
Line 3
Line 9
Line 10
AMD$ awk 'a[[=11=]]{print;next}{a[[=11=]]=1}' sample.txt
Line 1
Line 2
Line 7
Line 3
我想在不使用排序命令的情况下将重复项重定向到另一个文件。
我试过使用以下命令,但没有用。
uniq -d sample.txt
它仅在我将其指定为“sort sample.txt | uniq -d
”时有效,但我想在不对文件进行排序的情况下取出文件的重复项。
还有其他方法吗?
您可以使用这个简单的 awk
命令完成它:
awk 'a[[=10=]]{print;next}{a[[=10=]]=1}' sample.txt
此处,[=13=]
=> 当前正在处理的完整行。如果 a[[=14=]]
已经设置,打印该行(这是重复的行)并继续到 next
行。否则 a[[=14=]]
已设置,因此下次同一行(如果存在)将被视为重复。
示例:
AMD$ cat sample.txt
Line 1
Line 2
Line 3
Line 1
Line 4
Line 5
Line 2
Line 6
Line 7
Line 7
Line 8
Line 3
Line 9
Line 10
AMD$ awk 'a[[=11=]]{print;next}{a[[=11=]]=1}' sample.txt
Line 1
Line 2
Line 7
Line 3