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