[LINUX] Aussi, quand je regarderai en arrière plus, j'écrirai d'une manière facile à comprendre quelle procédure a été implémentée....

introduction

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.

Script Shell que j'ai créé

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 ~

résultat

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,
~

notes awk

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

awk, fonction intégrée strftime

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.

awk, fonction intégrée substr

Une fonction qui renvoie une sous-chaîne de longueur à partir du caractère de début de chaîne.

substr(string, start [, length])

Autre

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.

à la fin

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

  1. Le problème que le fichier CSV ne peut pas être écrasé par la combinaison de awk et de redirection
  2. True / false ne fonctionne pas entre} et les guillemets simples dans le bloc END
  3. L'API Web renvoie-t-elle des informations de date sous forme de valeur de série pour éviter les bogues en fonction de l'environnement du partenaire?

référence

Recommended Posts

Aussi, quand je regarderai en arrière plus, j'écrirai d'une manière facile à comprendre quelle procédure a été implémentée....
Convertir des fichiers CSV UTF-8 pour les lire dans Excel
Conversion par lots de tous les fichiers xlsx du dossier en fichiers CSV
Convertir des fichiers écrits en python, etc. en pdf avec la coloration syntaxique
Translocation de fichiers CSV avec Python Partie 1
Gérer les fichiers csv avec Django (django-import-export)
Gérer les fichiers Excel CSV avec Python
Lire des fichiers en parallèle avec Python
Créez plusieurs utilisateurs avec des numéros de série à la fois dans Ansible Playbook: Partie 2
Chargez csv avec des colonnes en double dans pandas
Comment convertir csv en tsv dans la CLI
Convertir de PDF en CSV avec pdfplumber
Lire tous les fichiers csv dans le dossier
Renommez les fichiers au format AAAAMMJJ en numéros de série
Lire et écrire des fichiers csv avec numpy
Convertir des fichiers PDF en fichiers PNG avec GIMP
Comment lire des fichiers CSV avec Pandas