我有一個文件包含發現在一個領域的重複和UNIX的bash打印它們
apple
apple
banana
orange
apple
orange
我想要找到的重複蘋果和橙告訴以下用戶的腳本:蘋果和桔子是重複。 我試圖
nawk '!x[$1]++' FS="," filename
找到重複項 所以我怎樣才能在UNIX bash中打印出來?
我有一個文件包含發現在一個領域的重複和UNIX的bash打印它們
apple
apple
banana
orange
apple
orange
我想要找到的重複蘋果和橙告訴以下用戶的腳本:蘋果和桔子是重複。 我試圖
nawk '!x[$1]++' FS="," filename
找到重複項 所以我怎樣才能在UNIX bash中打印出來?
更新:
問題已被顯着改變。以前,回答這個時候,輸入文件應該是這樣的:
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
+1 devnul's answer。但是,如果該文件包含空格而不是換行符作爲分隔符。那麼以下將起作用。
tr [:blank:] "\n" < filename | sort | uniq -d
+1。試圖格式化問題時,很明顯輸入文件的項目放在不同的行上。我同意這很難猜測。 – devnull
@devnull :)我猜這樣的東西..但是,現在我們有兩個解決方案,兩個稍微不同的用例。因此,這不是很糟糕..... – hek2mgl
如果有2個字段呢?它如何知道它應該搜索哪個文件? – t28292