
10 awhdk;
14 hjoeow;
2 kdkld;
4 jkjdksl
Wie sortiert man dies basierend auf Spalte eins (also der Anzahl)?
Ich möchte diese Ausgabe erhalten:
14 hjoeow;10 awhdk;4 jkjdksl;2 kdkld
Ich muss beide Spalten basierend auf der Sortierung der ersten Spalte ausdrucken.
Antwort1
Mit können Sie -k
festlegen, wo in der Eingabezeile der Sortierschlüssel beginnt und endet.
Mit der -n
Option oder fügen Sie n
der Sortierschlüsselspezifikation hinzu, um standardmäßig eine numerische Sortierung statt einer lexikalischen Sortierung auszulösen. Und -r
um die Sortierung umzukehren.
Hier müssen Sie bei einer numerischen Sortierung den Sortierschlüssel nicht auf den Sortierbefehl beschränken. Wenn Sie dies tun:
sort -rn file
Dabei wird die ganze Zeile als Zahl behandelt. Die 14 hjoeow;
Zeile wird beispielsweise als 14
Zahl verstanden.
Du könntest es tun:
sort -bk 1,1rn file
Nur nach dem ersten Feld sortieren, aber das würde keinen Unterschied machen.
Der Befehl zum Verbinden von Zeilen ist paste
mit der -s
Option. Sie können das Trennzeichen mit angeben -d
. \0
ist ein spezieller Wert für das Trennzeichen, der bedeutetverbinden, ohne dass etwas dazwischen istSo erhalten Sie das erwartete Ergebnis:
sort -rn file | paste -sd '\0' -
POSIX paste
erfordert die Übergabe eines Dateinamens. -
ist wiederum ein spezieller Wert, der bedeutetStandardeingabepaste
. Bei einigen Implementierungen können Sie es weglassen .