我在 Internet 上找到了以下 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 程序中发生的事情,将不胜感激。
谢谢。