求助:Linux下用Shell脚本给文件日期字段添加月份的命令
解决Linux下CSV记录的月份加法需求
嘿,针对你这条CSV格式的记录,我推荐用awk结合GNU date命令来实现月份偏移计算,这是Linux环境下最通用的方案之一,不需要额外安装工具。
单行记录直接处理
如果你的记录是单行内容,可以直接用这条命令:
echo "ABC,XYZ,123,Sep-2018" | awk -F, '{ # 构造日期计算命令,给$4对应的日期加3个月 date_cmd = "date -d \""$4" +3 months\" +\"%b-%Y\"" # 执行命令并获取结果 date_cmd | getline new_date # 关闭命令管道避免资源泄漏 close(date_cmd) # 拼接所有字段输出 print $1","$2","$3","new_date }'
执行后会输出:ABC,XYZ,123,Dec-2018,完全符合你的预期。
处理文件中的多条记录
如果你的记录存在文件(比如records.txt)里,每行一条CSV,只需要把echo换成cat即可:
cat records.txt | awk -F, '{ date_cmd = "date -d \""$4" +3 months\" +\"%b-%Y\"" date_cmd | getline new_date close(date_cmd) print $1","$2","$3","new_date }'
关键细节说明
date -d "$4 +3 months":GNUdate支持这种人性化的日期偏移语法,不仅能加月份,还支持+1 year、-2 days等灵活操作+%b-%Y:指定输出格式为月份缩写(比如Sep、Dec)加4位年份,和你的输入格式完全匹配awk的getline:用来捕获外部命令的输出,close(date_cmd)是好习惯,避免打开过多管道导致资源问题
内容的提问来源于stack exchange,提问作者Programmer
相关产品推荐
相关产品推荐

