Как правильно перечислить это средствами Unix для pdfjam?

Я не могу придумать способ сделать это изначально в оболочке, но в perl , например, вы могли бы определить регулярное выражение для разделения полей, и используйте его, чтобы вставить один разделитель по вашему выбору, который затем можно было бы просто прочитать, используя IFS =, или что-то еще.

Согласно вашему образцу, поля могут быть разделены пробелом, за которым следует:

  1. символ верхнего регистра или дефис; или
  2. последовательность, состоящая как минимум из двух цифр

Итак, передайте вашу команду примерно так:

. . . | 
  perl -F'[[:space:]](?=[[:upper:]-]|[[:digit:]]{2,})' -anle 'print join ",", @F'
1
21.03.2017, 01:51
1 ответ

С zsh :

(LC_ALL=C; pdfjam ./*.pdf(n) --nup 1x1)

будет работать. (n) - квалификатор zsh glob для числовой сортировки. В языковом стандарте C «5a» сортируется после «5 G» , поскольку пробел сортируется перед a . В некоторых других регионах «a» может выполнять сортировку перед «G» , потому что пробелы и регистр будут проигнорированы при первом проходе (а A стоит перед G )

С другими оболочками и в GNU или совместимых системах вы можете сделать:

printf '%s\0' ./* | LC_ALL=C sort -t/ -znk2 |
  xargs -r0 sh -c 'pdfjam "$@" --nup 1x1' sh

Обратите внимание, что если список файлов слишком велик, а с подходом zsh , вы получите ошибку, здесь будет запущено несколько pdfjam , что, вероятно, тоже не то, что вам нужно (и может остаться незамеченным).

Вместо использования LC_ALL = C выше, чтобы убедиться, что пробелы сортируются перед , другой подход может заключаться в числовой сортировке, но по связям, лексической сортировке (в соответствии с правилами локали ) только в первом поле:

printf '%s\0' [0-9]* | sort -z -k1n -k1,1 |
  xargs -r0 sh -c 'pdfjam "$@" --nup 1x1' sh

Это позволит 5a сортировать до 5B , если регистр игнорируется для сортировки в вашей локали. 05a все равно будет выполнять сортировку перед 5 .

С bash 4.4 и выше вы также можете:

readarray -td '' files < <(
  printf '%s\0' [0-9]* | sort -z -k1n -k1,1)
pdfjam "${files[@]}" --nup 1x1
4
27.01.2020, 23:19

Теги

Похожие вопросы