2017-01-24 3 views
0

Ich habe einen Ordner mit Dateien, die alle diese aussehenBash: sort Dateinamen mit Chromosomen

ASX.chr.txt 

wo chr eine Reihe von 1-19, X, Y oder MT sein kann.

Gibt es eine Möglichkeit, diese Dateien zu sortieren, bekomme ich die folgende Reihenfolge?

ASX.1.txt 
ASX.2.txt 
ASX.3.txt 
... 
ASX.9.txt 
ASX.10.txt 
ASX.11.txt 
... 
ASX.19.txt 
ASX.X.txt 
ASX.Y.txt 
ASX.MT.txt 
+0

Woher möchten Sie sie sortieren? Von 'ls' ausgegeben? – fedorqui

+0

Vielleicht möchten Sie sich den Befehl 'sort' und seine Argumente ansehen. – kirelagin

+0

@fedorqui: ja, 'ls' Ausgabe. – maxie

Antwort

0

Ich mag @ Pii_ke Perloneliner. Wenn Sie jedoch nicht Perl haben, können Sie versuchen, diese —

ls | sed 's/\.M/.30M/;s/\.\([XY]\)/.20\1/'|sort -t. -k2 -n|sed 's/\.[23]0/./' 

(in bash)

  • Der erste sed ändert X->20X, Y->20Y, MT->30MT
  • die sort Sorten auf dem Teil nach dem ersten . und vor dem zweiten (-t. -k2), in numerischer Reihenfolge (-n). So X und Y kommen nach 19, wegen der 20, und MT kommt nach denen, wegen der 30. Die zweite sed macht den ersten Effekt rückgängig.
Verwandte Themen