如何使用命令行按日期筛选CSV文件中指定年份的数据行
从CSV中提取指定年份行的解决方案
问题原因
你的grep -E ^2020 data.csv命令是匹配行首为2020的内容,但你CSV的日期在第二列,且格式为MM/DD/YYYY 时间,年份不在行首,自然匹配不到结果。
推荐解决方案(awk)
按逗号分割字段直接匹配第二列的年份,结构化匹配准确率最高,适用于字段内部不含逗号的常规CSV文件。比如要提取2020年的行,命令如下:
awk -F ',' '$2 ~ /\/2020 /' data.csv > temp.csv
-F ','指定逗号为字段分隔符$2代表第二列内容/\/2020 /匹配第二列中包含/2020的内容,刚好对应日期格式中年份前的斜杠、年份值、年份后的空格,避免误匹配其他位置出现的目标年份字符串
如果要提取其他年份,把正则里的2020替换为对应年份即可。
可选方案(grep)
如果一定要使用grep实现,调整匹配规则适配你的CSV结构即可,以提取2020年为例:
grep -E '^[^,]+,[^/]+/[^/]+/2020 ' data.csv > temp.csv
^[^,]+,匹配行开头到第一个逗号的第一列内容[^/]+/[^/]+/2020匹配第二列的月、日、斜杠后缀,之后是2020和空格,完全适配你给出的日期格式
注意事项
- 如果需要将结果追加到已有temp.csv末尾而非覆盖,把命令中的
>替换为>>即可 - 如果你的CSV字段内部包含逗号(比如带逗号的字符串用引号包裹),以上基础命令可能出错,建议使用专门的CSV处理工具
csvkit实现,命令如下:
csvgrep -c 2 -r '/2020 ' data.csv > temp.csv
-c 2指定第二列为匹配列-r '/2020 '指定匹配的正则规则
内容的提问来源于stack exchange,提问作者markovv.sim
相关产品推荐
相关产品推荐

