Если у меня есть эти файлы в каталоге
cwcch10.pdf
cwcch11.pdf
cwcch12.pdf
cwcch13.pdf
cwcch14.pdf
cwcch15.pdf
cwcch16.pdf
cwcch17.pdf
cwcch18.pdf
cwcch1.pdf
cwcch2.pdf
cwcch3.pdf
cwcch4.pdf
cwcch5.pdf
cwcch6.pdf
cwcch7.pdf
cwcch8.pdf
cwcch9.pdf
как я могу перечислить их в Bash, чтобы они были в порядке возрастания чисел на основе числовой части строки. Итак, итоговый порядок cwcch1.pdf, cwcch2.pdf, ..., cwcch9.pdf, cwcch10.pdf
и т. Д.
В конечном итоге я пытаюсь объединить PDF-файлы pdftk
с чем-то вроде следующего
pdftk `ls *.pdf | sort -n` cat output output.pdf
но это не работает, так как моя сортировка неправильная.
Ответы:
Нечто подобное может делать то, что вы хотите, хотя и немного другой подход:
источник
Вы
sort
можете иметь возможность сделать это для вас:источник
-V, --version-sort natural sort of (version) numbers within text
Для этого конкретного примера вы также можете сделать это:
То есть сортируйте численно (-n) по второму полю (-k2), используя 'h' в качестве разделителя полей (-th).
источник
Вы можете использовать
-v
опцию в GNUls
: натуральный вид (версии) чисел в тексте.Это не работает с BSD
ls
(например, в OS X), где-v
опция имеет другое значение.источник
Используйте расширение оболочки прямо в командной строке. Расширение должно правильно их упорядочить. Если я правильно понимаю
pdftk
синтаксис командной строки, это будет делать то, что вы хотите:Или вы можете попробовать другой подход. Когда мне нужно сделать что-то подобное, я обычно стараюсь правильно отформатировать свои номера заранее. Если я опаздываю и PDF-файлы уже нумеруются, как в вашем примере, я буду использовать это для изменения нумерации:
Теперь стандартная
ls
сортировка будет работать правильно.источник
pdftk cwcch{{1..9},{10..18}}.pdf ...
bash
расширение?Вот метод, использующий сортировку:
источник
Сортировка -g используется для сортировки чисел в порядке возрастания.
Следующая строка перебирает файл с именами файлов PDF и захватывает числа только с помощью egrep -o и использует sort -g для сортировки чисел в порядке возрастания . Затем он передает эти числа в sed и подключает их. Затем выводит дубликаты с помощью uniq.
Вместо uniq вы также можете использовать awk:
Выше эквивалентно Uniq.
То, что вы ищете, это один лайнер:
Содержание tmp:
РЕДАКТИРОВАТЬ:
Вывод команды:
источник
tmp
файл? Любой вывод вставить в ответ?