Sortieren Sie den Text nach einer bestimmten Position in jeder Zeile.

Sortieren Sie den Text nach einer bestimmten Position in jeder Zeile.

Ich möchte Textzeilen nach einer bestimmten Stelle im Text sortieren (die Textzeilen haben keine Leerzeichen oder Spalten). Ich habe eine Lösung dafür ausgearbeitet, möchte aber wissen, ob es eine direktere und einfachere Möglichkeit gibt, dies zu tun.

Meine derzeitige Methode hierfür besteht darin, einen Umbruch zu verursachen, d. h. an derselben Stelle in jeder Zeile eine neue Spalte zu erstellen (direkt vor dem Punkt, nach dem ich sortieren möchte – das ist Sn_L001_Rn), dann nach dieser Spalte zu sortieren und die beiden Spalten anschließend wieder zusammenzufügen. Das funktioniert, scheint aber übermäßig kompliziert und umständlich. Ich habe Beiträge zum Erstellen eines Punktesystems mit awk gesehen, aber da meines mindestens bis 96 gehen wird, scheint dies langwierig. Ich habe auch gesehen, dass SQLite anwendbar sein könnte, aber dies scheint auch genauso langwierig zu sein. Ich entschuldige mich, wenn diese Frage bereits gestellt wurde, aber bisher habe ich keine einfache Methode gefunden, sie zu lösen.

Hier sind einige Beispieleingaben:

SOON_S2_L001_R1_001.txt    
SOON_S2_L001_R2_001.txt    
HELLO_S4_L001_R1_001.txt    
HELLO_S4_L001_R2_001.txt    
BASH_S1_L001_R1_001.txt    
BASH_S1_L001_R2_001.txt    
WORLD_S3_L001_R1_001.txt    
WORLD_S3_L001_R2_001.txt    

Gewünschte Ausgabe:

BASH_S1_L001_R1_001.txt    
BASH_S1_L001_R2_001.txt    
SOON_S2_L001_R1_001.txt    
SOON_S2_L001_R2_001.txt    
WORLD_S3_L001_R1_001.txt    
WORLD_S3_L001_R2_001.txt    
HELLO_S4_L001_R1_001.txt    
HELLO_S4_L001_R2_001.txt    

Um die Komplexität noch weiter zu erhöhen, möchte ich, dass in einer Situation, in der es mehr als 1 gleiche Sn gibt, der Name berücksichtigt wird (obwohl ich denke, dass dies möglicherweise mithilfe von Flags in auflösbar ist sort).

Antwort1

sort -t_ -k2 infilesortiert die Daten mit dem 2. Schlüssel und dem Unterstrich als Trennzeichen.

verwandte Informationen