Ich habe eine lange Liste, die in /var/tmp/file.txt von einem Skript (auf der Solaris-Maschine) erstellt wurde. Die folgende Liste hat 4 Felder
Bitte geben Sie an, wie die Liste entsprechend dem folgenden ZEITSTEMPEL sortiert werden soll (mit dem Sortierbefehl oder einem anderen Solaris-Befehl wie awk oder sed …)
Beispielsweise sollten Datum und Uhrzeit 15-10-2009 08:29:18 vor 15-10-2009 08:29:10 liegen ... usw.
Beispiel für file.txt (unsortierte Datei)
PHONE_NUMBER TIMESTAMP ID TYPE
-------------------- ------------------- ---- --------------
972544111222 15-10-2009 08:29:18 20 sharp_gx10
33633333333 24-09-2009 16:17:45 20 other_mm_phone
841990000043 08-10-2009 09:04:38 60 other_mm_phone
972541230001 08-10-2009 14:23:48 20 other_mm_phone
Antwort1
Wie ich in einem Kommentar sagte, lässt das Zeitstempelformat meinen Ansatz verworren erscheinen, aber es handelt sich größtenteils um eine mechanische Wiederholung.
awk 'NR>2 {print $1"-"$2"-"$3"-"$4"-"$5}' file.txt |\
awk -F'-' '{print $4"-"$3"-"$2"-"$5"-"$1"-"$6"-"$7}' |\
sort |\
awk -F'-' '{print $5"\t"$1"-"$2"-"$3" "$4"\t"$6"\t"$7}'
- Überspringen Sie die ersten beiden Zeilen (nur eine Überschrift) und wandeln Sie die restlichen Zeilen so um, dass sie ein einzelnes Trennzeichen verwenden (in diesem Fall einen Bindestrich; stellen Sie sicher, dass dieser nicht im letzten Feld erscheinen darf) (ursprünglich wechselt er aufgrund des Datumsformats zwischen Leerzeichen und Bindestrich).
- Trennen Sie die Felder mit einem Bindestrich und verschieben Sie das Datum an den Anfang der Zeile (zur einfacheren Verwendung mit
sort
) und drucken Sie es in absteigender Reihenfolge. - sortieren und
- Drucken Sie die Informationen in einem ähnlichen Format wie die Eingabe aus (tauschen Sie
$1
und aus,$3
um das alte Datumsformat zu erhalten).
Fügen Sie die Kopfzeilen anschließend wieder hinzu, falls gewünscht.
BEARBEITEN: Ich habe gesehen, dass Sie eine umgekehrte Sortierung wünschen. Ändern Sie einfach sort
in sort -r
.