我有一個可能有重複的csv文件。我需要awk命令的幫助,它只打印出現在文件中只出現一次的行。awk命令,在csv文件中只出現一次的打印行
如: 輸入文件:
a,b
a,c
a,d
a,b
a,c
b,e
b,f
b,d
b,f
b,e
輸出:
a,d
b,d
謝謝您的幫助。
我有一個可能有重複的csv文件。我需要awk命令的幫助,它只打印出現在文件中只出現一次的行。awk命令,在csv文件中只出現一次的打印行
如: 輸入文件:
a,b
a,c
a,d
a,b
a,c
b,e
b,f
b,d
b,f
b,e
輸出:
a,d
b,d
謝謝您的幫助。
使用awk
:
awk '{arr[$0]++}END{for(i in arr)if(arr[i]==1)print i}' infile
sort和uniq
$ sort file | uniq -u # -u generates unique entries; -d nonunique
a,d
b,d
測試結果:
$ cat file
a,b
a,c
a,d
a,b
a,c
b,e
b,f
b,d
b,f
b,e
$ awk '{arr[$0]++}END{for(i in arr)if(arr[i]==1)print i}' file
a,d
b,d
說明:
arr[$0]++
$0
是當前行/記錄,其被用作陣列鍵,arr
是陣列,arr[$0]++
持有密鑰的出現的計數,所以每當AWK發現複製鍵,計數將由一個遞增。
所以在結束塊,循環數組,如果count等於1,則打印這樣的數組鍵。
最短的一個具有uniq
命令:
uniq -u <(sort file)
-u
- 僅打印唯一的行輸出:
a,d
b,d