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

awk找出第二列和第三列等于特定单词的次数,awk,Awk,假设我有一个names.txt文件,其中包含以下内容 Bob Billy Billy Bob Billy Joe Bob Billy Billy Joe Billy Billy 使用awk我想知道$2=Billy和$3=Billy的次数。在这种情况下,我期望的输出是3倍 另外,如果有必要的话,我正在mac电脑上测试这一点。首先需要测试$2==3,然后测试其中一个是否等于Billy。递增一个计数器,然后在末尾打印结果: $ awk '$2==$3 && $2=="Billy"{c

假设我有一个names.txt文件,其中包含以下内容

Bob Billy Billy
Bob Billy Joe
Bob Billy Billy
Joe Billy Billy
使用awk我想知道$2=Billy和$3=Billy的次数。在这种情况下,我期望的输出是3倍

另外,如果有必要的话,我正在mac电脑上测试这一点。

首先需要测试$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
首先需要测试$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

你也可以考虑使用GRIP来做到这一点,

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

-C:打印匹配行计数

,也可以考虑使用GRIP来完成,

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

-c:打印一个匹配行计数

您有多个文件或仅输入?您有多个文件或仅输入?@EdMorton:谢谢您的建设性意见。编辑。@EdMorton:谢谢你的建设性评论。所做的编辑。