Linux-Sortierbefehl: Wie sortiert man nach einer in einem Feld eingebetteten Zahl?

Linux-Sortierbefehl: Wie sortiert man nach einer in einem Feld eingebetteten Zahl?

Ich verwende RHEL 6 und BASH.

Ich versuche, einige Zeilen in einer Datei nach einer in einem Feld eingebetteten Zahl zu sortieren. Der Name der Datei ist word.txt.

Dies ist der Befehl, den ich verwende:

sort -n -k4 word.txt

Dies ist die Ausgabe, die ich erhalte, nicht in numerischer Reihenfolge:

INSERT INTO area_names VALUES(124,'NewYork');
INSERT INTO area_names VALUES(125,'NewYork');
INSERT INTO area_names VALUES(12,'NewYork');

Offensichtlich sollte die Zeile mit nur „12“ zuerst stehen.

Die Zahl nach „VALUES(“ kann beliebig lang sein

Wie kann ich sort anweisen, nach der Zahl zwischen „VALUES(“ und "," zu sortieren?

Ich kann auf einen Workaround zurückgreifen, indem ich in den Daten nach „VALUES(“ ein Leerzeichen einfüge, aber das würde ich lieber nicht tun, es sei denn, es ist die beste Option.

Antwort1

Versuche dies:

 sort -t "(" -k2,2 -n word.txt

Ausgabe

INSERT INTO area_names VALUES(12,'NewYork');
INSERT INTO area_names VALUES(124,'NewYork');
INSERT INTO area_names VALUES(125,'NewYork');

-k POS1[,POS2]

     Geben Sie ein Sortierfeld an, das aus dem Teil der Zeile zwischen
     POS1 und POS2 (oder das Zeilenende, wenn POS2 weggelassen wird),
     _inklusive_.

     Jeder POS hat die Form `F[.C][OPTS]', wobei F die Nummer des
     zu verwendendes Feld und C ist die Nummer des ersten Zeichens aus dem
     Anfang des Feldes. Felder und Zeichenpositionen sind
     nummeriert beginnend mit 1; eine Zeichenposition von Null in POS2
     gibt das letzte Zeichen des Feldes an. Wenn `.C' ausgelassen wird in
     POS1, standardmäßig 1 (der Anfang des Feldes); wenn weggelassen
     von POS2 ist der Standardwert 0 (das Ende des Feldes). OPTS sind
     Bestellmöglichkeiten, die eine Sortierung der einzelnen Schlüssel nach
     nach unterschiedlichen Regeln; Einzelheiten siehe unten. Schlüssel können mehrere
     Felder.

     Beispiel: Um nach dem zweiten Feld zu sortieren, verwenden Sie „--key=2,2“ („-k 2,2“).

verwandte Informationen