GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So sortieren Sie diese Ausgabe 1,10,11..2

Am besten leiten Sie zu GNU sort weiter , mit GNU sort ist --version-sort Option aktiviert

das wäre also oracleasm listdisks | sort --version-sort

Von der Infoseite

--version-sort’
     Sort by version name and number.  It behaves like a standard sort,
     except that each sequence of decimal digits is treated numerically
     as an index/version number.  (*Note Details about version sort::.)

Auf deine Eingabe hin gibt es mir

DATA1
DATA2
DATA3
DATA4
DATA5
DATA6
DATA7
DATA8
DATA9
DATA10
DATA11
DATA12
FRA1
FRA2
FRA3
FRA10
FRA11
OCR1
OCR2
OCR3

Wenn sort --version-sort nicht verfügbar ist, in 2 Felder aufteilen:Feld 1 =führende Nichtziffern und Feld 2 =ganze Zahl, und die Felder mit TAB dazwischen drucken. Verwenden Sie dann sort auf 2 TAB-getrennte Felder, dann entfernen Sie den TAB. Stellen Sie eine Verbindung über Pipes her, um E/A-Overhead zu vermeiden. Hier ist ein Beispiel mit einem minimalen Teil der Daten aus dem OP plus ein paar zusätzlichen Datensätzen:

echo 1 10 2 11 DATA DATA1 DATA10 DATA11 DATA2 FRA FRA1 FRA10 FRA11 FRA2 | \
    xargs -n1 | \
    perl -lne 'print join "\t", /(\D*)(\d*)/' | \
    sort -k1,1 -k2,2n | \
    perl -pe 's/\t//'

Drucke:

1
10
11
2
DATA
DATA1
DATA2
DATA10
DATA11
FRA
FRA1
FRA2
FRA10
FRA11

DETAILS:

Die Perl-Einzeiler verwenden diese Befehlszeilen-Flags:
-e :weist Perl an, inline nach Code zu suchen, statt in einer Datei.
-n :Schleife die Eingabe zeilenweise durch und weise sie $_ zu standardmäßig.
-l :Trennzeichen der Eingabezeile entfernen ("\n" standardmäßig auf *NIX), bevor Sie den Code inline ausführen, und hängen Sie ihn beim Drucken an.
-p :dasselbe wie -n , sondern auch print die Zeile am Ende jeder Schleife (eliminiert explizit print ).

Innerhalb des ersten Einzeilers \d ist eine beliebige Ziffer (0-9) und \D ist eine beliebige Nicht-Ziffer. Jedes dieser Muster wird 0 Mal oder mehrmals wiederholt (unter Verwendung von * ). Die beiden Muster werden mit Klammern erfasst und als LIST zurückgegeben aus zwei Feldern, die auf einem TAB verbunden und gedruckt werden.

Der zweite Perl-Einzeiler entfernt einfach den ersten TAB, findet nichts (leerer String) und gibt die Zeile aus.

An sort Auf 2 Feldern werden diese Optionen verwendet:-k1,1 :nach Feld 1 ASCIIbetisch sortieren. Dann:
-k2,2n :wenn Feld 1 gleich ist, sortiere auf Feld 2 numerisch (-n Möglichkeit).
Beachten Sie, dass die Feldnummer zweimal wiederholt wird (z. B. 1,1 ), um das Sortieren auf dem Rest der Zeile zu verhindern und die Sortierung nur auf diese Spaltennummer zu beschränken.


Linux
  1. Wie leite ich die Ausgabe eines Programms in eine Zip-Datei um?

  2. Wie kann man sich merken, wie man die Umleitung verwendet?

  3. Wie erstelle ich einen virtuellen Ausgang in Pulsaudio?

  4. Ausgabe nach Spalte sortieren?

  5. So funktioniert ein Linux-Server

So weisen Sie einer Variablen die Ausgabe eines Linux-Befehls zu

Wie sortiere ich die Ausgabe nach Größe?

Wie lösche ich dieses unauslöschliche Verzeichnis?

Wie sortiere ich eine Datei basierend auf ihren numerischen Werten für ein Feld?

Wie speichere ich die Ausgabe dieses awk-Befehls in einer Datei?

So sortieren Sie eine Datei an Ort und Stelle