【问题标题】:Subsetting a CSV by unique column values按唯一列值对 CSV 进行子集化
【发布时间】:2014-11-24 14:02:43
【问题描述】:

我对 linux 还很陌生,觉得这应该是一个相当简单的任务,但我不太明白。我有一个包含数百万行的大型数据文件,我想根据日期将文件分成更小的文件。我有一个包含 YYMMDDHH 数据的时间列,我想根据 DD 创建子文件。对于每个新的 DD,我想要一个包含当天所有条目的新文件。该文件是一个 csv 文件,并且已经按时间排序。

根据我的阅读,我应该能够使用 cat、awk 和可能的 grep 来执行我想要的操作。

进一步说明,每行有 14 列。一列的数据包含 YYMMDDHH(即 14071000、14071000...14071022、14071022...14071100...14071200...)

我可以手动设置子集

cat trial | awk 'NR>=1 && NR<=100 {print}' >output.txt

这给了我 1 到 100 之间的行。我想知道是否有一个命令允许我根据 YYMMDDHH 列进行提取,以便可以将 140710 上的所有数据点放在一个文件中。希望这有助于更好地解释我的问题。

【问题讨论】:

  • 为了让我们能够更轻松地为您提供帮助,您应该在问题中添加输入文件的示例。此外,很高兴看到您到目前为止所做的尝试。

标签: linux csv awk grep


【解决方案1】:

你应该能够使用 s.th。像这样:

awk '{ line_date = $1 / 100; print > "out_" line_date ".txt"; }'

顺便说一句,您可能希望通过不使用管道而是直接在文件上使用 awk 来避免“无用使用 cat”。

【讨论】:

    【解决方案2】:

    YYMMDDHH 14071000

    假设 YYMMDDHH 在第 1 列。

    awk '{fn = substr($1, 1, 6) ; print $0 >> fn }' 1.txt
    

    【讨论】:

      【解决方案3】:
      awk '{print $0 >> "File" substr($1, 0, 6) ".txt"}' file
      

      假设日期在第一列。逻辑是将每一行附加到相应的文件中(文件名是 YYMMDD 格式的日期)。这样每个日期对应的所有数据都会在相应的“FileYYMMDD.txt”中。如果日期在其他列中,您只需将 $1 更改为列号即可。

      样本输出:

      sdlcb@Goofy-Gen:~/AMD/SO$ cat file
      14071000 asasaa
      14071022 iosido
      14071000 lsdksld
      14071022 sodisdois
      14071100 iwiwe
      14071022 iosido
      14071100 iwiwe
      14071200 yqiwyq
      sdlcb@Goofy-Gen:~/AMD/SO$ awk '{print $0 >> "File" substr($1, 0, 6) ".txt"}' file
      sdlcb@Goofy-Gen:~/AMD/SO$ ls
      file  File140710.txt  File140711.txt  File140712.txt
      sdlcb@Goofy-Gen:~/AMD/SO$ cat File140710.txt
      14071000 asasaa
      14071022 iosido
      14071000 lsdksld
      14071022 sodisdois
      14071022 iosido
      sdlcb@Goofy-Gen:~/AMD/SO$ cat File140711.txt
      14071100 iwiwe
      14071100 iwiwe
      sdlcb@Goofy-Gen:~/AMD/SO$ cat File140712.txt
      14071200 yqiwyq
      

      【讨论】:

        猜你喜欢
        • 2016-03-20
        • 2015-04-02
        • 1970-01-01
        • 2021-04-30
        • 1970-01-01
        • 2014-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多