Ich habe eine Textdatei mit 3 Spalten, die durch Folgendes getrennt sind: Wie sortiere ich die zweite Spalte nach den letzten beiden Ziffern der zweiten Spalte?

Ich habe eine Textdatei mit 3 Spalten, die durch Folgendes getrennt sind: Wie sortiere ich die zweite Spalte nach den letzten beiden Ziffern der zweiten Spalte?

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,2nweist an sort, das zweite Feld ab Zeichen 4 (das ist, was .4tut) bis zum Ende des Feldes als Sortierschlüssel zu verwenden und die Eingabe numerisch nach diesem Schlüssel (dem nam 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 sortals auch sortOpenBSD 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.

verwandte Informationen