Wenn ich auf eine bestimmte Web-API traf, war die Datumsinformation in den ausgespuckten CSV-Daten ein serieller Wert (warum?) Ich habe ein Skript erstellt, das eine bestimmte Spalte einer CSV-Datei mit awk konvertiert. Als Ausführungsumgebung habe ich Kali mit WSL von Windows 10 Pro verwendet.
test.sh
#~ Ausgelassen
cat ${output_dir}/tmp.csv | awk '{FS=",";OFS=","} NR>1{ $2=strftime("%Y-%m-%d",
substr($2, 0, 10)) } 1' > ${output_dir}/result.csv
#Ausgelassen ~
Es scheint, dass es vorerst funktioniert hat.
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
Eine Funktion, die einen Zeitstempel in eine Zeichenfolge umwandelt, die für Menschen leicht zu verstehen ist, und diese zurückgibt. Diese Funktion scheint mit der C-Standardbibliothek von ANSI identisch zu sein.
Strftime-Funktion
strftime([format [, timestamp]])
Zeichen für die Konvertierungsbezeichnung | Inhalt |
---|---|
%Y | 4-stelliges westliches Kalenderjahr einschließlich des Jahrhundertteils. |
%m | Mond(Dezimalschreibweise).. Geben Sie von 01 bis 12 an. |
%d | Monatliches Gesamtdatum(Dezimalschreibweise).. Geben Sie von 01 bis 31 an. |
Eine Funktion, die einen Teilstring der Länge beginnend mit dem Startzeichen in der Zeichenfolge zurückgibt.
substr(string, start [, length])
In diesem Skript habe ich die ursprünglichen CSV-Daten in eine neue CSV-Datei umgeleitet. Das Schreiben zum Überschreiben der ursprünglichen CSV-Datei wie unten gezeigt hat nicht funktioniert. Kann die ursprüngliche CSV-Datei, die von awk gesperrt ist, nicht überschrieben werden?
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
** $ () ** heißt "Befehlsersetzung (Posix-Spezifikation)" und scheint die Subshell aufzurufen. .. Sie können das Gleiche tun, indem Sie es in Anführungszeichen (``) setzen, aber es scheint, dass Sie es verschachteln können.
Am Ende blieben die folgenden Fragen offen, aber das Ziel der Rückgabe der Seriennummer in der CSV wurde erreicht. Ich konnte die Verarbeitung implementieren, die ich machen wollte, aber es fühlt sich an, als hätte ich das Spiel gewonnen und das Spiel verloren lol Wenn Sie Folgendes wissen, würde ich es begrüßen, wenn Sie mir m (_ _) m beibringen könnten
Recommended Posts