匹配两列中的字符串然后打印计数 AWK

匹配两列中的字符串然后打印计数 AWK

我有一个包含 21 列的 csv 文件。我想在两列中搜索一个字符串,然后计算出现的总数。

我的数据集样本

columnA     columnB    columnC  columnD
abc          Apple      Apple     today
nbd          apple      NULL      tomorrow
ccc          apple      Apple     today

我能够搜索文件中的字符串。但我只想搜索两列中的字符串。我的搜索区分大小写(完全匹配)

awk -F',' '/Apple/ {++count} END{print count}' Dataset.csv

我想在 B 列和 C 列($2 && $3)上应用搜索。输出应该是 3

任何提示都会有帮助。谢谢

答案1

awk -F',' '$2 ~ /^Apple$/ {++count} $3 ~ /^Apple$/ {++count} END{print count}' Dataset.csv

或者,由于您想要完全匹配,==因此将执行以下操作~

awk -F',' '$2 == "Apple" {++count} $3 == "Apple" {++count} END{print count}' Dataset.csv

count如果在中找到它,这将增加任何一个 $2或者$3

如果您只想count在两者中都找到它时才增加,请使用:

awk -F',' '$2 ~ /^Apple$/ && $3 ~ /^Apple$/ {++count} END{print count}' Dataset.csv

awk -F',' '$2 == "Apple" && $3 == "Apple" {++count} END{print count}' Dataset.csv

或(连接两个字段以匹配 AND 字符串 x 2):

awk -F',' '$2$3 ~ /^AppleApple$/ {++count} END{print count}' Dataset.csv

awk -F',' '$2$3 == "AppleApple" {++count} END{print count}' Dataset.csv

答案2

使用 awk 将字段分隔符设置为搜索模式:

awk -F'Apple' '{count+=NF-1}END{print count}' file

count变量随字段数增加并打印在文件末尾。


使用 GNU awk 的替代方案,需要使用 RS 作为正则表达式(字边界,感谢 @cas):

 awk -v RS='\\<Apple\\>' 'END{print NR-1}' file

NR这只是检查文件中找到了多少条记录。

相关内容