我有一个包含 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
这只是检查文件中找到了多少条记录。