2017-09-13 39 views
0

我在寫一個bash腳本。我有這樣一個文件對文件進行排序達到一個字符

./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 

我想排序這個文件,但以特定的方式。我們先調用第一個#第一個字符,第二個#第二個字符。因此,例如,給出這樣一行:

./1#2#d41d8cd98f00b204e9800998ecf8427e 

第一部分:./1

第二節:2

我想才達到的排序該文件根據第一個第一和那麼根據第2節。那麼這個例子有什麼問題是第9行,它應該是第2行。

有沒有簡單的方法來實現這一目標?我不確定如何解決這個問題。也許我應該以某種方式將這個文件分類到第一個#,然後再按照第二個部分進行分類?即使這是一個很好的答案,不知道該怎麼做。

預期結果:

./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

發佈最終預期結果 – RomanPerekhrest

回答

2

好像你只是想通過多個鍵排序:

$ 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排序只有第一個字段表示,然後-k2排序指其餘的領域從第二個開始。 -t#表示字段之間用#分開。

相關問題