bash: ISO-Daten in d:m:y konvertieren

bash: ISO-Daten in d:m:y konvertieren

Ich habe ein Programm, das eine Ausgabe wie diese erzeugt (Daten im ISO-Format):

2010-06-04 15:48:17 +0200
2010-06-04 12:34:39 +0200
2010-02-01 14:02:44 +0200
2010-06-04 12:21:19 +0200
2010-06-04 12:21:04 +0200
2009-05-02 15:38:14 +0200
2009-03-02 15:38:09 +0200
2010-06-04 14:45:00 +0200
...

Wie konvertiere ich die Ausgabe in eindeutige, sortierte Daten:

2010-06-04
2010-02-01
2009-05-02
2009-03-02

Und führen Sie dann an jedem einzelnen Datum Folgendes aus: mycommand --withargs [yyyy-mm-dd]?

Antwort1

Sie können Folgendes tun:

$ <iso_command> | awk '{print $1}' | sort -u | xargs -n 1 mycommand --withargs

Antwort2

Die Verwendung eines einfachen Textanalysetools ist möglicherweise nicht die beste Methode, wenn Sie Daten aus verschiedenen Zeitzonen abrufen möchten.

Es ist möglicherweise besser, die formatierte Zeichenfolge in dieDatumBefehl und verwenden Sie ihn dann zum Neuformatieren, wie Sie möchten. Ein einfaches „awk“ oder „cut“ könnte Ergebnisse zurückgeben, die nicht ganz genau sind. Wenn Sie beispielsweise in PST waren, die Daten aber in UTC waren, würde das Datum während der Daten um 7 von 24 Stunden abweichen.

$echo '2010-06-04 15:48:17 +0200' | xargs -I var_d date --date='var_d' +%Y-%m-%d
2010-06-04

Antwort3

cut -c 1-10 -|sort -ru

oder

cut -c 1-10 /path/to/myfile |sort -ru

Antwort4

Ausgehend datevon GNU Coreutils,

program > dates
while read isodate; do
    ymd=$(date -d "$isodate" +'%Y-%m-%d')
    mycommand --withargs "$ymd"
done < dates

verwandte Informationen