You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用awk修改CSV文件中的日期格式(MM/DD/YYYY转YYYY/MM/DD)

没问题,我来给你几个实用的方案,不管是用awk还是其他工具都能搞定这个日期格式转换的需求~

用awk实现日期格式转换

awk是处理这类文本转换的利器,根据你的CSV结构不同,有几种针对性的写法:

情况1:所有字段都是MM/DD/YYYY格式

如果你的CSV里每一列都是日期,直接遍历所有字段处理即可:

awk -F',' -v OFS=',' '{for(i=1; i<=NF; i++) {split($i, d, "/"); $i = d[3]"/"d[1]"/"d[2]}}1' input.csv > output.csv
  • -F',' 和 -v OFS=',' 分别指定输入和输出的字段分隔符为逗号,保证CSV格式不变
  • split($i, d, "/") 把每个日期字段拆分成月(d[1])、日(d[2])、年(d[3])
  • 最后用1触发awk默认的打印行为,输出所有处理后的行

情况2:只有特定列是日期(比如第2列)

如果只有某一列是日期(比如业务数据里只有交易日期列需要转换),只需要单独处理该列:

awk -F',' -v OFS=',' '{split($2, d, "/"); $2 = d[3]"/"d[1]"/"d[2]}1' input.csv > output.csv

把$2换成你实际需要处理的列号即可(比如第3列就是$3)。

情况3:日期字段带双引号

很多CSV会给字段加双引号(比如"03/15/2024"),这种情况可以先去掉引号处理,再重新加上:

awk -F',' -v OFS=',' '{gsub(/"/, "", $2); split($2, d, "/"); $2 = "\""d[3]"/"d[1]"/"d[2]"\""}1' input.csv > output.csv
  • gsub(/"/, "", $2) 移除第2列的所有双引号
  • 处理完日期后用"\""把新日期包起来,保持CSV的引号格式
其他工具方案

用sed快速替换(适合简单场景)

如果你的CSV里只有日期字段带斜杠,没有其他干扰字符,可以用sed的正则替换快速搞定:

sed -E 's/([0-9]{2})\/([0-9]{2})\/([0-9]{4})/\3\/\1\/\2/g' input.csv > output.csv
  • -E 启用扩展正则表达式,让匹配更简洁
  • 正则([0-9]{2})\/([0-9]{2})\/([0-9]{4})精准匹配MM/DD/YYYY格式
  • 替换为\3\/\1\/\2,也就是把年移到最前面,月和日保持顺序

用Python处理复杂CSV(推荐用于边缘场景)

如果你的CSV结构复杂(比如字段里有换行、嵌套引号),用Python的csv模块会更稳妥,它能自动处理CSV的各种规范:

import csv

# 替换成你的输入输出文件路径
input_file = 'input.csv'
output_file = 'output.csv'

with open(input_file, 'r') as infile, open(output_file, 'w', newline='') as outfile:
    reader = csv.reader(infile)
    writer = csv.writer(outfile)
    
    for row in reader:
        # 假设第2列是日期(索引从0开始,所以是row[1])
        date_str = row[1].strip('"')  # 移除可能的双引号
        mm, dd, yyyy = date_str.split('/')
        row[1] = f"{yyyy}/{mm}/{dd}"  # 转换为YYYY/MM/DD格式
        writer.writerow(row)

这个方法能避免手动处理分隔符时的各种坑,适合生产环境的复杂数据。

内容的提问来源于stack exchange,提问作者GustavMahler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:44:43