インターネットで次の AWK プログラムを見つけ、少し調整して列 $2 を確認しました。
{ a[$2,NR]=$0; c[$2]++ }
END {
for( k in a ) {
split(k,b,SUBSEP)
t=c[b[1]] # added this bit to capture count
if( b[1] in c && t>1 ) { # added && t>1 only print if count more than 1
print RS "TIMES ID" RS c[b[1]] " " b[1] RS
delete c[b[1]]
}
for(i=1;i<=NR;i++) if( a[b[1],i] ) {
if(t>1){print a[b[1],i]} # added if(t>1) only print lines if count more than 1
delete a[b[1],i]
}
}
}
次のファイルがあるとします。
abc,2,3
def,3,4
ghi,2,3
jkl,5,9
mno,3,2
コマンドを実行すると、出力は次のようになります。
Command: awk -F, -f find_duplicates.awk duplicates
Output:
TIMES ID
2 2
abc,2,3
ghi,2,3
TIMES ID
2 3
def,3,4
mno,3,2
これで問題ありません。
AWK プログラムで何が起こっているのかを理解したいと思います。
最初の行が各行を多次元配列にロードしていることを理解していますか? したがって、ファイルの最初の行は次のa['2','1']='abc,2,3'
ようになります。
しかし、私は何をするのか、また??c[$2]++
の意味は何かについて少し自信があります。split(k,b,SUBSEP)
誰かがこの AWK プログラムで何が起こっているかを行ごとに説明できれば幸いです。
ありがとう。