【问题标题】:Split csv file based on column from command line根据命令行中的列拆分 csv 文件
【发布时间】:2018-11-04 03:16:18
【问题描述】:

我有一些数据以csv的形式存在于一个文件中:

ID,DATE,EARNING
1,12 May 2018,5
1,13 May 2018,15
2,12 May 2018,25

我想将其拆分为多个文件,以便 file_1_May_report 包含:

ID,DATE,EARNING
1,12 May 2018,5
1,13 May 2018,15

另一个文件 file_2_May_report 包含:

ID,DATE,EARNING
2,12 May 2018,25

我试过了:

awk -F, '{print >> $1}' input.csv 

但是我只得到一个文件 1 只有一条记录,即输入文件中的最后一条记录。如何根据 ID 将其拆分为多个文件?

【问题讨论】:

    标签: shell awk command-line scripting


    【解决方案1】:

    你可以使用这个awk:

    awk -F, 'NR==1{hdr=$0; next} !seen[$1]++{fn="file_" $1 "_May_report"; print hdr > fn} {print > fn}' input.csv
    

    或者使用更易读的格式:

    awk -F, 'NR == 1 {
       hdr = $0
       next
    }
    !seen[$1]++ {
       fn = "file_" $1 "_May_report"
       print hdr > fn
    }
    {
       print > fn
    }' input.csv
    

    【讨论】:

    • 我在发布之前已经正确测试了这个 awk。你能澄清什么不起作用吗?
    • 它不创建任何文件
    • 这行得通。问题是我的文件有错误的行终止符。必须运行 tr '^M' '\n' unix-input.csv
    猜你喜欢
    • 1970-01-01
    • 2020-05-20
    • 2021-07-25
    • 2012-01-14
    • 2017-10-10
    • 2015-03-06
    • 2018-06-16
    • 1970-01-01
    • 2015-01-09
    相关资源
    最近更新 更多