Bash
使用 awk 辨識重複欄位並列印兩者
我有一個包含多個列的文件,並且想要辨識那些特定列值(第 3-6 列)已重複的文件。
以下程式碼找到重複項,但我想顯示兩個實例,而不僅僅是第二個。其他列值(列 1、2 和 7+)在 2 行之間可能不同,因此我需要查看這兩個實例。
awk 'seen[$3, $4, $5, $6]++ == 1' filename
uniq
是正確的工具:uniq -D -f2 file
在哪裡:
-D
- 列印所有重複項-f2
- 避免比較前 2 個欄位**編輯:**如果不比較欄位 7 及以上,您需要
awk
:awk 'n=x[$3,$4,$5,$6]{print n"\n"$0;} {x[$3,$4,$5,$6]=$0;}' file
- 檢查數組項
x[]
(第 3-6 列)。如果已經設置了執行該部分{...}
(在同一語句中,n
變數設置為該數組項的值)- 在括號中
{...}
:列印n
變數和目前行。$0
- 然後我們將
x[]
下一次迭代的數組項設置為目前行內容,以供以後比較。