Dies ist ein Beispiel der Textdatei:
195.92.211.47:21029:400
195.92.211.48:21023:400
Wie kann ich die Zeilen der Datei nach den letzten beiden Ziffern der zweiten Spalte sortieren? Die zweite Spalte besteht immer aus fünf Ziffern.
Antwort1
Angenommen, das zweite :
durch -getrennte Feld enthält immer fünf Ziffern:
$ sort -t ':' -k2.4,2n file
195.92.211.48:21023:400
195.92.211.47:21029:400
Das -k2.4,2n
weist an sort
, das zweite Feld ab Zeichen 4 (das ist, was .4
tut) bis zum Ende des Feldes als Sortierschlüssel zu verwenden und die Eingabe numerisch nach diesem Schlüssel (dem n
am Ende) zu sortieren. Um numerisch nach demganzzweites Feld hätten Sie verwendet -k2,2n
. -t ':'
Normalerweise sagt man, dass Felder durch Doppelpunkte voneinander abgegrenzt werden.
Sie können sehen, dass die richtigen Zahlen zum Sortieren verwendet werden, wenn Sie den Befehl mit ausführen --debug
(hier werden sowohl GNU sort
als auch sort
OpenBSD angezeigt):
$ gsort --debug -t ':' -k2.4,2n file
gsort: text ordering performed using simple byte comparison
195.92.211.48:21023:400
__
_______________________
195.92.211.47:21029:400
__
_______________________
$ sort --debug -t ':' -k2.4,2n file
Memory to be used for sorting: 2139060224
sort_method=heapsort
; k1=<23>, k2=<29>; s1=<195.92.211.48:21023:400>, s2=<195.92.211.47:21029:400>; cmp1=-1
195.92.211.48:21023:400
195.92.211.47:21029:400
Antwort2
Verwendensort -t: -nk2.4
-t uses the delimiter :
-n for numerical sort
-k your key is the second column
Die wichtigsten Definitionen werden in sehr gut erklärt info sort
.
'-k POS1[,POS2]'
'--key=POS1[,POS2]'
Geben Sie ein Sortierfeld an, das aus dem Teil der Zeile zwischen POS1 und POS2 besteht (oder dem Ende der Zeile, wenn POS2 weggelassen wird), inklusive.
Jeder POS hat die Form „F[.C][OPTS]“, wobei F die Nummer des zu verwendenden Felds und C die Nummer des ersten Zeichens vom Anfang des Felds ist. Felder und Zeichenpositionen werden beginnend mit 1 nummeriert; eine Zeichenposition von Null in POS2 gibt das letzte Zeichen des Felds an. Wenn „.C“ in POS1 weggelassen wird, ist es standardmäßig 1 (der Anfang des Felds); wenn es in POS2 weggelassen wird, ist es standardmäßig 0 (das Ende des Felds). OPTS sind Sortieroptionen, die es ermöglichen, einzelne Schlüssel nach unterschiedlichen Regeln zu sortieren; Einzelheiten siehe unten. Schlüssel können sich über mehrere Felder erstrecken.
Beispiel: Um nach dem zweiten Feld zu sortieren, verwenden Sie „--key=2,2“ („-k 2,2“). Weitere Hinweise zu Schlüsseln und weitere Beispiele finden Sie weiter unten. Siehe auch die Option „--debug“, um den Teil der Zeile zu bestimmen, der bei der Sortierung verwendet wird.