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 date
von GNU Coreutils,
program > dates
while read isodate; do
ymd=$(date -d "$isodate" +'%Y-%m-%d')
mycommand --withargs "$ymd"
done < dates