如何从CSV文件指定时间戳列中提取特定年份的行并导出新文件
问题原因
你之前的命令未生效有两个核心问题:
- 字段匹配错误:
$1指代CSV的第一列,你需要筛选的第二列应使用$2指代 - 规则逻辑错误:时间戳字段不会整体等于
2019,需要提取字段内的年份部分做匹配
可行方案
方案1:awk实现(更稳定,优先推荐)
awk原生支持按列筛选,不会因为其他列出现2019导致误匹配,处理大型CSV效率更高:
场景A:第二列是字符串格式时间戳(如2019-05-20、2019/11/02)
awk -F ',' '$2 ~ /2019/' file1.csv > file2.csv
如果要更严谨避免2019出现在月日位置,可以限制匹配字段开头:
awk -F ',' '$2 ~ /^[^0-9]*2019/' file1.csv > file2.csv
场景B:第二列是10位Unix时间戳
awk -F ',' 'strftime("%Y", $2) == "2019"' file1.csv > file2.csv
方案2:grep实现
如果要使用grep工具,可通过正则定位第二列的年份,仅适合CSV没有带逗号的引号包裹字段的场景:
grep -E '^[^,]*,[^,]*2019' file1.csv > file2.csv
内容的提问来源于stack exchange,提问作者samster
相关产品推荐
相关产品推荐

