如何用sed或awk交换CSV文件日期字段中的日与月
转换CSV最后一个字段的日期格式(月/日/年 → 日/月/年)
针对CSV文件最后一个字段为MM/DD/YYYY(月/日/年)格式的场景,以下是用sed和awk实现格式转换为DD/MM/YYYY(日/月/年)的具体命令:
方法1:使用sed
利用正则捕获分组交换日期中的月和日部分:
# 适配两位数字的月/日 sed -E 's/([0-9]{2})\/([0-9]{2})\/([0-9]{4})$/\2\/\1\/\3/' input.csv > output.csv # 兼容一位数字的月/日(如1/9/2023) sed -E 's/([0-9]{1,2})\/([0-9]{1,2})\/([0-9]{4})$/\2\/\1\/\3/' input.csv > output.csv
-E启用扩展正则表达式,避免转义括号- 正则匹配行尾的日期格式,捕获月(第一组)、日(第二组)、年(第三组),替换时交换前两组的位置
方法2:使用awk
通过拆分最后一个字段来重组日期:
awk -F ',' -OFS ',' '{split($NF, date_parts, "/"); $NF = date_parts[2]"/"date_parts[1]"/"date_parts[3]}1' input.csv > output.csv
-F ','设置输入分隔符为逗号,-OFS ','设置输出分隔符为逗号,保证CSV格式不变split($NF, date_parts, "/")将最后一个字段($NF)按/拆分为数组date_parts,其中date_parts[1]是月,date_parts[2]是日,date_parts[3]是年$NF = ...重新赋值最后一个字段,交换月和日的位置- 末尾的
1表示打印所有修改后的行
示例验证
输入行:
No non-compliant users,db2inst2,NA,C,13/09/2023
执行命令后输出行:
No non-compliant users,db2inst2,NA,C,09/13/2023
内容的提问来源于stack exchange,提问作者azad aawaraa
相关产品推荐
相关产品推荐

