Ich weiß, dass die Option -k für die Unix- Sortierung es uns ermöglicht, nach einer bestimmten Spalte und allen folgenden zu sortieren . Beispiel für die Eingabedatei:
2 3
2 2
1 2
2 1
1 1
Mit sort -n -k 1
bekomme ich eine Ausgabe sortiert nach der 1. Spalte und dann nach der 2.:
1 1
1 2
2 1
2 2
2 3
Ich möchte jedoch die Reihenfolge der zweiten Spalte beibehalten:
1 2
1 1
2 3
2 2
2 1
Ist das mit dem sort
Befehl möglich?
join
ist, dass die Eingabe nach den Feldern sortiert wird, an denen Sie teilnehmen. Diese Ausgabe ist also nach dem ersten Feld sortiert, und Sie können daran teilnehmen.-k 1,1
(die „ 1 “ -Teil) funktioniert nicht besser für mich. Was funktioniert ist-s -k 1
,-n
wenn Sie es brauchen.Um nur nach der ersten Spalte zu sortieren, sollten Sie Folgendes tun:
Aus dem Unix- und Linux-Systemverwaltungshandbuch
quelle
-s
Option hinzufügen, wie Cascabel betont hat.-s
sagt "Diese Option behält die ursprüngliche Datensatzreihenfolge von Datensätzen bei, die einen gleichen Schlüssel haben."Keine der angegebenen Antworten funktioniert generell für mich.
Beides
sort -s -k 2 file1
undsort -n -k1,1
zusätzliche Sortierung mit dieser Datei:Ich musste genau das tun und endete mit einer Shell-Schleife. Diese Lösung eignet sich möglicherweise nicht für sehr große Dateien, da für jeden eindeutigen Wert in der sortierten Spalte die gesamte Datei gelesen werden muss.
Hier ist die Datei nur nach Spalte 2 sortiert.
quelle
sort -s -k2,2 file1