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

Shell 将包含多个日期记录的UNIX文件拆分为每个日期的一个文件,shell,unix,awk,sed,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

我有一个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
如果有人能在这方面提供帮助,我将不胜感激。

您很接近:

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

Perl:

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

如果您不想将
作为字段分隔符包含在内,您可以在字段2上拆分,以获得日期部分:

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

我想知道是否也可以更改文件名。例如,包含2015-09-22数据的文件应命名为file_2015-09-23.csv等????在这种情况下,文件名规则是什么(如果09-22命名为09-23,那么09-23数据又如何呢?)是的,假设文件名是日期“x”,它应该包含日期“x-1”的数据,即每个文件包含前一天的数据。