Генерация параметров для pdftk с помощью цикла в bash

Для этого вы можете использоватьcomm(напротив diff).

comm -1 -2 1.txt 2.txt >3.txt

-1подавляет строки первого столбца (, которые находятся в 1.txt, но не2.txt)

-2подавляет строки второго столбца (, которые есть в 2.txt, но не1.txt)

остается только третий столбец, который будет общими строками


В Bash вы можете использовать подстановку процессов, чтобы сначала отсортировать файлы:

comm -1 -2 <(sort 1.txt) <(sort 2.txt) > 3.txt
0
09.02.2020, 20:21
2 ответа

Что-то вроде этого может быть тем, что вам нужно:

#!/bin/bash

filelist=""

for i in {1..5}; do
    filelist+="file${i}.pdf "
done

pkftk ${filelist} cat output xyz.pdf

Цикл начинается с 1..k и создает строку, содержащую «file1.pdf... filek.pdf». После завершения цикла он запускается pdftk, передавая список файлов, а также «cat output xyz.pdf», который вы указали в своем вопросе.

Если вам нужен один лайнер -, вы можете сократить вышеизложенное до (здесь, предполагаяk=5):

pdftk $(for i in {1..5}; do printf "%s " file$i.pdf; done) cat output.xyz.pdf

Логика такая же, но я использую подстановку команд для запуска цикла for; $(...)заменяется выводом ...(, в данном случае списком файлов ). Я использую printfвместо echo, чтобы избежать новой строки.

0
28.04.2021, 23:24

Если вы используете bash, как указано в вашем вопросительном теге, нет необходимости в цикле :вы должны иметь возможность использовать расширение фигурной скобки .

Пр. для k = 32

pdftk file{1..32}.pdf cat output xyz.pdf

Если количество файлов очень велико, этот подход может стать ограниченнымARG_MAX(и привести к ошибке "слишком длинный список аргументов" ).

1
28.04.2021, 23:24

Теги

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