首页 > 解决方案 > 从文件中的一行检查模式并计算与该模式匹配的行数

问题描述

我有一个名为checks的目录,其中有一个名为true.txt的文件,如下所示:

Column1     column2     column3     column4     column5
Data        25          gen(*)      87          65  
Stem        34          gen(*)      23          76
Invert      36          gen($)      89          67
Delete      32          gen($)      43          23
print       34          gen(*)      34          34
ctrl        23          gen($)      33          43

我需要计算包含gen(*)的行数和包含gen($)的行数,与 column1 无关,并且在某些情况下column3 gen($)可能不存在,然后我需要将其打印为零,我共享输出语法以供参考和所需输出,如下所示:

output syntax:
Directoryname : count of gen($)     count of gen(*)

output:
checks : 3  3

我尝试了这段代码,但没有得到确切的输出:

#!/bin/bash
for d in checks
awk 'BEGIN
FNR==NR
/gen \(\*\)/{
  tot=FNR
  next
}
END{
  print "checks : ",tot-1
}
' true.txt

标签: awk

解决方案


请您尝试以下操作。书面和测试链接 https://ideone.com/xBrCzc

awk '
$3=="gen(*)"{ countGenstar++ }
$3=="gen($)"{ countGendollar++ }
END{
  print "Count: ",countGenstar+0,countGendollar+0
}' Input_file

推荐阅读