2013-07-03 52 views
1

擁有一個像如何訂購ls後綴輸出?

GGGG_3.0.3_98/ 
GGGG_3.0.3_d_100/ 
GGGG_3.0.3_d_101/ 
GGGG_3.0.3_d_99/ 
GGGG_3.0.4_104/ 
GGGG_3.0.4_105/ 
GGGG_3.0.4_106/ 
GGGG_3.0_87/ 
GGGG_3.0_89/ 
GGGG_3.0_90/ 
GGGG_3.0_91/ 
GGGG_3.0_92/ 
GGGG_3.0_93/ 
SSS_2.2.3_01/ 
SSS_2.2.3_02/ 
SSS_2.2.3_03/ 
TTT_2.8.3_29/ 

一個LS輸出如何獲得通過後綴訂購的要素是什麼?

,有沒有任何快速命令我可以用來知道,106是這個例子中的最後一個後綴?

對不起:不清楚在給定示例中的「後綴」是最後一個下劃線後的所有內容。

+4

什麼是後綴?最後下劃線後的所有內容? – chepner

+2

'ls |排序-n -k3,3 -t_'會做到這一點,除了一些目錄有3個下劃線... – user000001

回答

3
ls ... |awk -F'[_/]' '{f=$(NF-1)>f?$(NF-1):f}END{print f}' 

會給你106

通過後綴進行排序:

ls..|awk -F'[_/]' '{print $(NF-1), $0}'|sort -n|sed 's/.* //' 

注意

  • awk|sort|sed鏈是沒有必要的,AWK可以單獨完成, (按asort/asorti)。但它是第一個,(我知道)和快速。

  • 如果文件/目錄名稱有空格,則可能無效。但它是可以修復的。例如使用不可見的字符作爲分隔符。

+1

+1。我的想法正是^^:打印前面的排序字段,並使用排序。你擊敗了我!我相信它是'ls -1F',所以後面有'/'。或者像'ls -d * /'之類的東西。 –

+0

既完美謝謝! :d –