将包含多个日期记录的UNIX文件拆分为每个日期的一个文件

时间:2015-09-25 09:37:53

标签: shell unix awk sed

我有一个包含以下记录的UNIX CSV文件 -

Merged_file.csv
USD,2015-09-22 02:34:43.0,XXX
USD,2015-09-22 03:31:43.0,XXX
USD,2015-09-22 04:35:43.0,XXX
USD,2015-09-23 03:31:43.0,XXX
USD,2015-09-23 02:34:43.0,XXX
USD,2015-09-23 03:37:43.0,XXX
USD,2015-09-23 04:32:43.0,XXX

我想将此文件拆分为多个文件,例如一个文件应包含仅一个日期的记录。

需要输出 -

File_2015-09-23.csv - 
USD,2015-09-23 03:31:43.0,XXX
USD,2015-09-23 02:34:43.0,XXX
USD,2015-09-23 03:37:43.0,XXX
USD,2015-09-23 04:32:43.0,XXX

File_2015-09-22.csv -
USD,2015-09-22 02:34:43.0,XXX
USD,2015-09-22 03:31:43.0,XXX
USD,2015-09-22 04:35:43.0,XXX

我尝试使用下面的命令,但由于第二个字段是时间戳,它为每个时间戳创建单独的文件,我无法弄清楚如何仅将日期作为拆分的基本字符串文件 -

awk -F, '{print >  "File_"$2".csv"}' Merged_file.csv

感谢是否有人可以提供帮助。

3 个答案:

答案 0 :(得分:5)

你很亲密:

matrix[num_rows][num_columns]

只需将分隔符更改为逗号和空格即可。同时将重定向更改为awk -F"[, ]" '{print >> "File_"$2".csv"}' Merged_file.csv ,将内容附加到文件中。

答案 1 :(得分:1)

Perl救援:

perl -F'[\s,]' -ane '
    open my $O, ">>", "File_$F[1].csv" or die $!;
    print {$O} $_;
    ' Merged_file.csv

答案 2 :(得分:1)

如果您不希望将<space>整体包含为字段分隔符,则可以在字段2上拆分以获取日期部分:

 awk -F, '{ split($2, f, " "); print >  ("File_" f[1] ".csv")}' Merged_file.csv