Comment ajouter une colonne à la fin d'un fichier CSV en utilisant une chaîne dans une variable?
2012-02-29,01:00:00,Manhattan,New York,234
2012-02-29,01:00:00,Manhattan,New York,843
2012-02-29,01:00:00,Manhattan,New York,472
2012-02-29,01:00:00,Manhattan,New York,516
2012-02-29,01:00:00,Manhattan,New York,234,2012-02-29 16:13:00
2012-02-29,01:00:00,Manhattan,New York,843,2012-02-29 16:13:00
2012-02-29,01:00:00,Manhattan,New York,472,2012-02-29 16:13:00
2012-02-29,01:00:00,Manhattan,New York,516,2012-02-29 16:13:00
#!/bin/bash
awk -F"," '{$6="2012-02-29 16:13:00" OFS $6; print}' input.csv > output.csv
Ma tentative ci-dessus dans awk.sh a ajouté la chaîne à la fin mais a supprimé tous les séparateurs de virgules.
2012-02-29 01:00:00 Manhattan New York 234 2012-02-29 16:13:00
2012-02-29 01:00:00 Manhattan New York 843 2012-02-29 16:13:00
2012-02-29 01:00:00 Manhattan New York 472 2012-02-29 16:13:00
2012-02-29 01:00:00 Manhattan New York 516 2012-02-29 16:13:00
Appréciez toute aide!
#!/bin/bash
GAWK="/bin/gawk"
TIMESTAMP=$(date +"%F %T")
ORIG_FILE="input.csv"
NEW_FILE="output.csv"
#Append 'Create' DateTimeStamp to CSV for MySQL logging
$GAWK -v d="$TIMESTAMP" -F"," 'BEGIN {OFS = ","} {$6=d; print}' $ORIG_FILE > $NEW_FILE
rm -f $ORIG_FILE
Vous pouvez ajouter une virgule à OFS
(Séparateur de champ de sortie):
awk -F"," 'BEGIN { OFS = "," } {$6="2012-02-29 16:13:00"; print}' input.csv > output.csv
Production:
2012-02-29,01:00:00,Manhatten,New York,234,2012-02-29 16:13:00
2012-02-29,01:00:00,Manhatten,New York,843,2012-02-29 16:13:00
2012-02-29,01:00:00,Manhatten,New York,472,2012-02-29 16:13:00
2012-02-29,01:00:00,Manhatten,New York,516,2012-02-29 16:13:00
ÉDITEZ pour répondre au commentaire de SirOracle
:
Depuis la page de manuel de awk
:
-v var=val
--assign var=val
Assign the value val to the variable var, before execution of the program begins. Such
variable values are available to the BEGIN block of an AWK program.
Assignez donc votre date à une variable Shell et utilisez-la dans awk
:
mydate=$(date)
awk -v d="$mydate" -F"," 'BEGIN { OFS = "," } {$6=d; print}' input.csv > output.csv
Je ferais:
awk '{ printf("%s,2012-02-29 16:13:00\n", $0); }' input.csv > output.csv
Ce code dur code la valeur, mais votre code aussi.
Ou vous pouvez utiliser sed
:
sed 's/$/,2012-02-29 16:13:00/' input.csv > output.csv
Vous pouvez définir l'ODS (séparateur de champ de sortie):
awk -F"," 'BEGIN { OFS = "," } ; {$6="2012-02-29 16:13:00" OFS $6; print}' input.csv >output.csv
ce qui me donne:
2012-02-29,01:00:00,Manhatten,New York,234,2012-02-29 16:13:00,
2012-02-29,01:00:00,Manhatten,New York,843,2012-02-29 16:13:00,
2012-02-29,01:00:00,Manhatten,New York,472,2012-02-29 16:13:00,
2012-02-29,01:00:00,Manhatten,New York,516,2012-02-29 16:13:00,
Si quelqu'un veut créer un fichier csv via Shell avec des noms de colonnes: où la première entrée est stockée dans les variables from_time, to_time.
exemple: insérez deux horodatages avec from_time et to_time comme noms de colonnes avec des valeurs respectives -
CODE-
FROM_TIME=2020-02-06T00:00:00
TO_TIME=2020-02-07T00:00:00
{ echo -e "$FROM_TIME,$TO_TIME";}>input1.csv
{ echo -e "from_time,to_time"; cat input1.csv;} > input.csv
première ligne stockant les valeurs deuxième ligne chargée d'ajouter le nom de la colonne