
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“).