我有一个包含
的文件apple
apple
banana
orange
apple
orange
我想要一个脚本,找到重复的苹果和橙色,并告诉用户以下内容:苹果和橙色重复。 我试过了
nawk '!x[$1]++' FS="," filename
找到重复的项目 那么如何在unix bash中打印出来呢?
答案 0 :(得分:10)
为了打印重复的行,您可以说:
$ sort filename | uniq -d
apple
orange
如果您还要打印计数,请向-c
提供uniq
选项:
$ sort filename | uniq -dc
3 apple
2 orange
答案 1 :(得分:4)
+1 devnul's answer。但是,如果文件包含空格而不是换行符作为分隔符。那么以下就行了。
tr [:blank:] "\n" < filename | sort | uniq -d
答案 2 :(得分:1)
更新
问题已经发生了重大变化。以前,在回答此问题时,输入文件应如下所示:
apple apple banana orange apple orange
banana orange apple
...
然而,该解决方案仍然可行,但对于这个特殊用例可能有点过于复杂。
以下awk脚本将完成这项工作:
awk '{i=1;while(i <= NF){a[$(i++)]++}}END{for(i in a){if(a[i]>1){print i,a[i]}}}' your.file
输出:
apple 3
orange 2
这种形式更容易理解:
#!/usr/bin/awk
{
i=1;
# iterate through every field
while(i <= NF) {
a[$(i++)]++; # count occurrences of every field
}
}
# after all input lines have been read ...
END {
for(i in a) {
# ... print those fields which occurred more than 1 time
if(a[i] > 1) {
print i,a[i];
}
}
}
然后使文件可执行并执行它,将输入文件名传递给它:
chmod +x script.awk
./script.awk your.file