Как перечислить или отсортировать файлы cat в числовом порядке?

У меня есть следующие файлы:

1A34_3_2.pdb
1A34_6_3.pdb
1A34_9_4.pdb
1A34_A_5.pdb
1A34_D_6.pdb
...
1A34_A2_23.pdb
. ..
1A34_BK_45.pdb

Я хотел бы отсортировать их по числам в конце имени файла [например, 6 — это число в конце имени файла 1A34_D_6.pdb]

Если я использую ls -1v 1A34*, результат будет таким:

1A34_3_2.pdb
1A34_6_3.pdb
1A34_9_4.pdb
1A34_A2_23.pdb
1A34_A_5.pdb
1A34_BK_45.pdb
1A34_D_6.pdb

Это не в порядке возрастания последней цифры в имени файла.


person Angana    schedule 01.06.2021    source источник


Ответы (1)


Передайте вывод команды ls этому фильтру:

ls | perl -e '@filenames=<>; print sort {substr($a, 7) <=> substr($b, 7)} @filenames'

Выход:

1A34_3_2.pdb
1A34@filenames3.pdb
1A34sort {substr($a, 7) <=> substr($b, 7)} @filenames4.pdb
1A34_A_5.pdb
1A34_D_6.pdb
1A34sort {substr($a, 7) <=> substr($b, 7)} @filenames14.pdb
1A34_D_16.pdb

@filenames=<>; помещает вывод команды ls в массив @filenames.

sort() @filenames в числовом виде, начиная с 7-го смещения сортируемой строки, например 1A34

1A34_3_2.pdb
1A34@filenames3.pdb
1A34sort {substr($a, 7) <=> substr($b, 7)} @filenames4.pdb
1A34_A_5.pdb
1A34_D_6.pdb
1A34sort {substr($a, 7) <=> substr($b, 7)} @filenames14.pdb
1A34_D_16.pdb
2.pdb: sort {substr($a, 7) <=> substr($b, 7)} @filenames

Ссылки: sort() substr()

person Aditya    schedule 13.06.2021