Diviser le fichier UNIX contenant plusieurs enregistrements de date en un seul fichier pour chaque date

J’ai un fichier CSV UNIX contenant des enregistrements comme ci-dessous –

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 

Je veux diviser ce fichier en plusieurs fichiers, par exemple un fichier doit contenir des enregistrements pour une seule date.

Sortie nécessaire –

 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 

J’ai essayé d’utiliser la commande ci-dessous, mais comme le second champ est un horodatage, il crée des fichiers séparés pour chaque horodatage et je ne suis pas en mesure de déterminer comment donner uniquement la date comme base pour diviser les fichiers.

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

Appréciez si quelqu’un peut vous aider s’il vous plaît.

Tu étais proche:

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

Changez simplement le délimiteur en virgule et espace. Modifiez également la redirection sur >> , qui ajoute le contenu au fichier.

Perl à la rescousse:

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

Si vous ne voulez pas inclure comme séparateur de champs, vous pouvez diviser le champ 2 pour obtenir la partie date:

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