awk找出列二和三等于特定单词的次数

时间:2017-09-28 23:57:38

标签: awk

假设我有一个带有以下

的names.txt文件
Bob Billy Billy
Bob Billy Joe
Bob Billy Billy
Joe Billy Billy

并使用awk我想知道$ 2 = Billy多少次,而$ 3 = Billy。在这种情况下,我想要的输出将是3次。

另外,如果重要的话,我会在Mac上对此进行测试。

2 个答案:

答案 0 :(得分:3)

首先需要测试$2==$3,然后测试其中一个等于"Billy"。增加一个计数器,然后在结尾打印结果:

$ awk '$2==$3 && $2=="Billy"{cnt++} END{print cnt+0}' names.txt
3

或者,你几乎可以写下你说的话:

$ awk '$2=="Billy" && $3=="Billy" {cnt++} END{print cnt+0}' names.txt
3

如果您想使用变量,那么您不需要多次输入:

$ awk -v name='Billy' '$2==name && $3==name {cnt++} 
                       END{printf "Found \"%s\" %d times\n", name, cnt+0}' names.txt
Found "Billy" 3 times

或者,您可以全部收集它们并报告发现的内容:

$ awk '{cnts[$2 "," $3]++}
        END{for (e in cnts) print e ": " cnts[e]}' names.txt
Billy,Billy: 3
Billy,Joe: 1

答案 1 :(得分:1)

您也可以考虑使用grep来做到这一点,

$ grep -c "\sBilly\sBilly" name.txt
3

-c:打印匹配行数