首页 > 解决方案 > 试图在列中获取包含“/ 2020”的行数

问题描述

我有一个大约 700 万行的大型数据集,我试图在 $2 列中查找日期中包含“/2020”的行数($2 是格式为 mm/dd/yyyy 的所有日期)。但是,awk我尝试的所有命令要么给我 0,要么根本不打印任何东西,我不知道为什么。

awk -F',' '$2 == "/2020" { count++ } END { print count }' file.csv

什么都不打印

awk -v variable="2020" '$2 ~ variable' file.csv | wc -l 

打印 0

awk ' BEGIN {count=0;} { if ($2 =="2020") count += 1} END {print count}' file.csv 

打印 0

我会很感激一些帮助。谢谢!

标签: csvawk

解决方案


使用的语法是:

awk -F, '$2 ~ /\/2020/{cnt++} END {print cnt}' file.csv

==将意味着第二个字段将与模式完全相同,而~意味着它与模式匹配,只是字段的一部分可以像模式一样。

另请参阅GNU awk 手册的相关部分

此外,如果您添加了字段分隔符,您的第二次尝试将起作用,请注意,这里您只匹配没有斜线的年份。

awk -F, -v variable="2020" '$2 ~ variable' file.csv | wc -l

注意:假设文件中的引号字段中没有嵌套分隔符(逗号),至少对于前两个字段。如果有,则应使用更复杂的模式作为字段分隔符。


推荐阅读