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

如何修改CSV文件指定列:日期格式转换与空值处理

解决CSV日期格式转换与空值替换问题

原始CSV文件内容

CNPJ,73811717000167,ABC,04886747000140,ATIVO,2020-04-22T16:21:47.758-03:00,null,2020-04-22T16:21:47.758-03:00,2020-04-22T16:21:47.758-03:00
CNPJ,71179825000180,ABC,01234567000199,ATIVO,2021-04-22T16:21:47.758-03:00,ATIVO,2021-04-22T16:21:47.758-03:00,2021-04-22T16:21:47.758-03:00

需求

  • 将第6、8、9列的日期时间格式从YYYY-MM-DDTHH:MM:SS.fff-zz:zz转换为YYYY-MM-DD HH:MM:SS
  • 将所有列中的null替换为空值

已尝试的方法及问题

  • 空值替换的sed命令可用:
    sed -i 's/null//g' teste_kiki.csv
    
  • 尝试的awk命令错误地将整列设为固定值,不符合需求:
    awk -F \, 'BEGIN{OFS=FS}
        {$6=1; print}' teste_kiki.csv
    
  • 尝试在awk中嵌套sed时出现语法错误:
    awk -F \, 'BEGIN{OFS=FS}
        {$6={sed 's/T/ '};
          print}' teste_kiki.csv
    
    错误提示:

    awk: line 1: syntax error at or near {
    awk: line 2: missing } near end of file

可行解决方案

方法一:纯awk一次性处理两个需求

awk本身支持字符串操作,不需要嵌套sed,可同时完成日期格式转换和空值替换:

awk -F ',' 'BEGIN{OFS=","}
{
    # 处理第6列日期:替换T为空格,删除小数点及后续内容
    sub(/T/, " ", $6); sub(/\..*/, "", $6)
    # 处理第8列日期
    sub(/T/, " ", $8); sub(/\..*/, "", $8)
    # 处理第9列日期
    sub(/T/, " ", $9); sub(/\..*/, "", $9)
    # 全局替换所有null为空
    gsub(/null/, "", $0)
    print $0
}' teste_kiki.csv > processed_teste_kiki.csv

说明:

  • sub(/正则/, 替换内容, 目标列):对指定列执行单次替换
  • gsub(/正则/, 替换内容, 目标行):对整行执行全局替换
  • 输出到新文件避免直接修改原文件,确认结果无误后可用mv processed_teste_kiki.csv teste_kiki.csv覆盖原文件

方法二:sed+awk组合处理

如果想保留原空值替换的sed命令,可分两步处理:

  1. 先执行空值替换:
    sed -i 's/null//g' teste_kiki.csv
    
  2. 再用awk处理日期格式:
    awk -F ',' 'BEGIN{OFS=","}
    {
        # 遍历需要处理的列索引
        cols[6]; cols[8]; cols[9]
        for (col in cols) {
            sub(/T/, " ", $col)
            sub(/\..*/, "", $col)
        }
        print $0
    }' teste_kiki.csv > processed_teste_kiki.csv
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 01:53:13