【问题标题】:Split Large CSV into multiple files by column按列将大型 CSV 拆分为多个文件
【发布时间】:2017-01-27 10:55:23
【问题描述】:

我有一个 4.5GB 大小的 CSV。我想根据列将此 CSV 分成不同的文件。例如:

File1.csv: Cols(1,35,36,37)    
File2.csv: Cols(1,127,129,135) 
File3.csv: Cols(1,285,287,299,311) 
File4.csv: Cols(1,2,4,5,6,12,13,14)

** 注意第 1 列是 id 列,始终需要。

本质上,我想将这个包含 328 列的 CSV 分解为用于 Mysql 导入的许多较小的 CSV。

虽然我可以使用多个 awk 命令轻松完成此操作,但我不想使用每个命令重新处理整个 4.5GB-6GB 文件。有什么建议吗?

【问题讨论】:

    标签: linux file csv awk split


    【解决方案1】:

    您可以redirect outputprint 到awk 中的不同文件:

    awk '{print $1, $35, $36, $37 > "file1.csv"} \
         {print $1, $127, $129, $135 > "file2.csv"} \
         {print $1, $285, $287, $299, $311 > "file3.csv"}\
         {print $1, $2, $4, $5, $6, $12, $13, $14 > "file4.csv"}' inFile.csv
    

    【讨论】:

    • 这不幸引发了错误:awk: 1: unexpected character '.'
    • @Mrd05d:您应该将其他两个文件的... 替换为print 命令。
    • 哦...是的,我很抱歉 @Mrd05d 我很懒,不想再打字了。认为您会了解 awk 重定向的要点并从那里获取。 :)
    • 我得到错误即使只有一个:awk -F',' '{print $1,$2,$3 > file1.csv}' filein.csv
    • 刚刚进行了另一个更新,将文件名用双引号括起来。有助于阅读手册,我想。试一试。
    猜你喜欢
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-14
    • 2014-06-06
    • 2022-01-12
    • 2014-07-29
    相关资源
    最近更新 更多