Bash

使用 awk 辨識重複欄位並列印兩者

  • January 4, 2018

我有一個包含多個列的文件,並且想要辨識那些特定列值(第 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[]下一次迭代的數組項設置為目前行內容,以供以後比較。

引用自:https://unix.stackexchange.com/questions/225418