如何使用sed/awk实现两个CSV文件按日期匹配替换及缺失值前向填充?
问题解答
结论
- 该需求无需编写完整shell脚本,直接使用单行awk命令即可实现
实现命令
假设第一个带数值的csv文件命名为data.csv,第二个单列日期文件命名为dates.csv,执行以下命令即可得到预期输出:
awk -F ',' 'NR==FNR {row[$1]=$0; next} {if ($1 in row) {cur=row[$1]} else {cur=$1 substr(cur, index(cur, ","))} print cur}' data.csv dates.csv
命令说明
-F ',':指定输入字段的分隔符为逗号NR==FNR {row[$1]=$0; next}:仅处理第一个输入文件data.csv,将每行的日期作为键,完整行内容存入字典row,处理完当前行直接跳到下一行,不执行后续逻辑- 处理第二个文件
dates.csv的逻辑:- 若当前行的日期存在于
row字典中,将缓存变量cur更新为该日期对应的完整行 - 若当前行的日期不存在,将
cur中原有的日期替换为当前行的日期,其余字段保留上一行的数值 - 打印当前
cur的内容
- 若当前行的日期存在于
适用前提
- 第二个日期文件的日期按升序排列
- 两个文件的最早日期一致,保证第一行就能匹配到有效数据
内容的提问来源于stack exchange,提问作者ID
相关产品推荐
相关产品推荐

