2017-09-13 1 views
0

Ich schreibe ein Bash-Skript. Ich habe eine Datei wie dieseEine Datei bis zu einem Zeichen sortieren

./1#1#d41d8cd98f00b204e9800998ecf8427e 
./11.txt#2#d41d8cd98f00b204e9800998ecf8427e 
./12/1#1#d41d8cd98f00b204e9800998ecf8427e 
./12/1#2#d41d8cd98f00b204e9800998ecf8427e 
./12/1.txt#1#d41d8cd98f00b204e9800998ecf8427e 
./12/1.txt#2#d41d8cd98f00b204e9800998ecf8427e 
./12/2.txt#1#d41d8cd98f00b204e9800998ecf8427e 
./12/2.txt#2#d41d8cd98f00b204e9800998ecf8427e 
./1#2#d41d8cd98f00b204e9800998ecf8427e 
./13#2#d41d8cd98f00b204e9800998ecf8427e 
./2.txt#1#5d74727d50368c4741d76989586d91de 
./2.txt#2#5d74727d50368c4741d76989586d91de 

Ich möchte diese Datei sortieren, aber auf eine bestimmte Weise. Lassen Sie uns Zeichen bis zum ersten Abschnitt zwischen den beiden Zeichen Abschnitt zwei aufrufen. So zum Beispiel, eine Zeile wie diese gegeben:

./1#2#d41d8cd98f00b204e9800998ecf8427e 

Abschnitt eins: ./1

Abschnitt zwei: 2

Was will ich diese Datei achive ist die Sortierung nach Abschnitt eines ersten und dann nach Abschnitt 2. Was mit diesem Beispiel falsch ist, ist die 9. Zeile, es sollte 2. sein.

Gibt es einen einfachen Weg, dieses Ziel zu erreichen? Ich bin mir nicht sicher, wie ich dieses Problem angehen kann. Vielleicht sollte ich diese Datei irgendwie auf die erste # und dann wieder nur nach der zweiten Sektion sortieren? Auch wenn das eine gute Antwort ist, nicht sicher, wie es geht.

Erwartetes Ergebnis:

./1#1#d41d8cd98f00b204e9800998ecf8427e 
./1#2#d41d8cd98f00b204e9800998ecf8427e 
./11.txt#2#d41d8cd98f00b204e9800998ecf8427e 
./12/1#1#d41d8cd98f00b204e9800998ecf8427e 
./12/1#2#d41d8cd98f00b204e9800998ecf8427e 
./12/1.txt#1#d41d8cd98f00b204e9800998ecf8427e 
./12/1.txt#2#d41d8cd98f00b204e9800998ecf8427e 
./12/2.txt#1#d41d8cd98f00b204e9800998ecf8427e 
./12/2.txt#2#d41d8cd98f00b204e9800998ecf8427e 
./13#2#d41d8cd98f00b204e9800998ecf8427e 
./2.txt#1#5d74727d50368c4741d76989586d91de 
./2.txt#2#5d74727d50368c4741d76989586d91de 
+1

post das endgültige erwartete Ergebnis – RomanPerekhrest

Antwort

2

Scheint, wie Sie gerade von mehr als ein Schlüssel sortiert werden sollen:

$ sort -t# -k1,1 -k2 file 
./1#1#d41d8cd98f00b204e9800998ecf8427e 
./1#2#d41d8cd98f00b204e9800998ecf8427e 
./11.txt#2#d41d8cd98f00b204e9800998ecf8427e 
./12/1#1#d41d8cd98f00b204e9800998ecf8427e 
./12/1#2#d41d8cd98f00b204e9800998ecf8427e 
./12/1.txt#1#d41d8cd98f00b204e9800998ecf8427e 
./12/1.txt#2#d41d8cd98f00b204e9800998ecf8427e 
./12/2.txt#1#d41d8cd98f00b204e9800998ecf8427e 
./12/2.txt#2#d41d8cd98f00b204e9800998ecf8427e 
./13#2#d41d8cd98f00b204e9800998ecf8427e 
./2.txt#1#5d74727d50368c4741d76989586d91de 
./2.txt#2#5d74727d50368c4741d76989586d91de 

-k1,1 bedeutet sortiert nach nur dem ersten Feld, dann-k2 bedeutet sortiert nach der Rest der Felder, beginnend mit dem zweiten. -t# bedeutet, dass Felder durch eine # getrennt sind.

Verwandte Themen