Lorsque j'ai atteint une certaine API Web, les informations de date dans les données CSV qui ont été crachées étaient une valeur de série (pourquoi?), Donc J'ai créé un script qui convertit une colonne spécifique d'un fichier CSV avec awk. Comme environnement d'exécution, j'ai utilisé Kali avec WSL de Windows 10 Pro.
test.sh
#~ Omis
cat ${output_dir}/tmp.csv | awk '{FS=",";OFS=","} NR>1{ $2=strftime("%Y-%m-%d",
substr($2, 0, 10)) } 1' > ${output_dir}/result.csv
#Omis ~
Il semble que cela a fonctionné pour le moment.
tmp.csv
No,Date,description,
1,1273645330000,TEST,
~
↓
result.csv
No,Date,description,
1,2010-05-12,TEST,
~
WSL
$ echo 1 2 | awk '{print $1}'
1
$ echo 1 2 | awk '{print $1} 1'
1
1 2
$ echo 1 2 | awk '{print $1} 0'
1
$ echo 1 2 | awk '{print $0}'
1 2
$ echo 1 2 | awk '{print}'
1 2
$ echo 1 2 | awk '1'
1 2
$ echo 1 2 | awk '{print $1} true'
1
$ echo 1 2 | awk '{print $1} false'
1
Une fonction qui convertit un horodatage en une chaîne de caractères facile à comprendre pour les humains et la renvoie. Cette fonction semble être la même que la bibliothèque standard C d'ANSI.
fonction strftime
strftime([format [, timestamp]])
Caractère de désignation de conversion | Contenu |
---|---|
%Y | Année civile occidentale à 4 chiffres, y compris la partie siècle. |
%m | Mois(Notation décimale).. Spécifiez de 01 à 12. |
%d | Date totale mensuelle(Notation décimale).. Spécifiez de 01 à 31. |
Une fonction qui renvoie une sous-chaîne de longueur à partir du caractère de début de chaîne.
substr(string, start [, length])
Dans ce script, j'ai redirigé les données CSV d'origine vers un nouveau fichier CSV, L'écriture pour écraser le fichier CSV d'origine comme indiqué ci-dessous n'a pas fonctionné. Le fichier CSV d'origine étant verrouillé par awk, ne peut-il pas être écrasé?
test.sh
#1
awk '{FS=",";OFS=","} NR>1{ $2=strftime("%Y-%m-%d",
substr($2, 0, 10)) }1' ${output_dir}/tmp.csv > ${output_dir}/tmp.csv
#2
$(awk '{FS=",";OFS=","} NR>1{ $2=strftime("%Y-%m-%d",
substr($2, 0, 10)) }1' ${output_dir}/tmp.csv) > ${output_dir}/tmp.csv
** $ () ** est appelé "remplacement de commande (spécification posix)" et semble appeler le sous-shell. .. Vous pouvez faire la même chose en l'enveloppant entre guillemets (``), mais il semble que vous puissiez l'imbriquer.
En fin de compte, les questions suivantes sont restées, mais l'objectif de renvoyer le numéro de série dans le CSV a été atteint. J'ai pu implémenter le traitement que je voulais faire, mais j'ai l'impression d'avoir gagné le jeu et perdu le jeu lol Si vous connaissez ce qui suit, je vous serais reconnaissant si vous pouviez m'apprendre m (_ _) m
Recommended Posts