在Bash中使用awk获取重复行
我试图知道哪些行在文本文件中重复X次,我使用的是在Bash中使用awk获取重复行,bash,shell,awk,text-processing,Bash,Shell,Awk,Text Processing,我试图知道哪些行在文本文件中重复X次,我使用的是awk,但我在命令中看到awk,而不是以相同字符或单词开头的行。也就是说,不单独识别整行 使用此命令,我尝试获取重复3次的行: awk '++A[$1]==3' ./textfile > ./log 这正是您所需要的: awk '{a[$0]++}END{for(i in a){if(a[i]==3)print i}}' File 以行($0)作为每行的索引,递增数组a。最后,对于每个索引($0),检查计数(a[i],即原始的a[$0]
awk
,但我在命令中看到awk
,而不是以相同字符或单词开头的行。也就是说,不单独识别整行
使用此命令,我尝试获取重复3次的行:
awk '++A[$1]==3' ./textfile > ./log
这正是您所需要的:
awk '{a[$0]++}END{for(i in a){if(a[i]==3)print i}}' File
以行(
$0
)作为每行的索引,递增数组a
。最后,对于每个索引($0
),检查计数(a[i]
,即原始的a[$0]
)是否等于3
。如果是,请打印该行(i
,它是原始的$0
/line)。希望清楚。这将返回重复3次的行,但在每重复3次的行的开头添加一个空格:
sort ./textfile | uniq -c | awk '$1 == 3 {$1 = ""; print}' > ./log
您使用的是行的第一个字段
$1
。如果需要整行代码,请使用$0
。此外,这将在文件中至少有三个副本的任何行上触发,而不是仅在文件中有三个副本。