Как получить разделенный запятыми список страниц с цветом в PDF? - PullRequest
0 голосов
/ 04 марта 2019

Рассмотрите этот PDF-файл colorpages.pdf, связанный здесь

У меня есть две команды, чтобы знать a) сколько цветных страниц у меня в моем PDF-файле b)на какой странице используется цвет.

Для а) Я использую

gs -o - -sDEVICE=inkcov colorpages.pdf | grep -v "^ 0.00000  0.00000  0.00000" | grep "^ " | wc 

и получаю число (общее количество страниц с цветом).

Для б) Я использую

gs -o - -sDEVICE=inkcov  colorpages.pdf |tail -n +5 |sed '/^Page*/N;s/\n//' |sed -E '/Page [0-9]+ 0.00000 0.00000 0.00000 / d'

, что дает мне хороший список с информацией о цвете;например,

Page 1 0.00000  0.00000  0.00000  0.99454 CMYK OK
Page 2 0.00000  0.99228  0.00000  0.00000 CMYK OK
Page 3 0.99222  0.00000  0.00000  0.00000 CMYK OK
Page 4 0.99289  0.99289  0.99289  0.99289 CMYK OK
Page 5 0.99316  0.99316  0.00000  0.00000 CMYK OK
Page 6 0.99130  0.99130  0.99130  0.99130 CMYK OK
Page 7 0.00000  0.00000  0.00000  0.99392 CMYK OK
Page 8 0.00000  0.00000  0.00000  0.99189 CMYK OK
Page 9 0.00000  0.00000  0.00000  0.99128 CMYK OK
Page 10 0.00000  0.00000  0.98594  0.00000 CMYK OK
Page 11 0.00000  0.98908  0.98908  0.00000 CMYK OK
Page 12 0.00000  0.00000  0.00000  0.98682 CMYK OK

Но мне нужно (дополнительно) список , разделенный запятыми всех используемых цветов страниц.


Отслеживание

Команда

gs -o - -sDEVICE=inkcov colorpages.pdf |tail -n +5 |sed '/^Page*/N;s/\n//' |sed -E '/Page [0-9]+ 0.00000 0.00000 0.00000 / d' | awk '$3!=0 && $4!=0 && $5!=0{if(length(colored))colored=colored","$2;else colored=$2} END{print colored}'

дает мне следующий список 1,2,3,4,5,6,7,8,9,10,11,12.Но это должно быть 2,3,4,5,6,10,11.

1 Ответ

0 голосов
/ 05 марта 2019
awk '$3!=0{if(length(colored))colored=colored","$2;else colored=$2} END{print colored}'
2,5,7




 -->echo "$x"
Page 1 0.00000  0.00000  0.00000  0.12395 CMYK OK
Page 2 0.00016  0.00035  0.00017  0.47061 CMYK OK
Page 3 0.00000  0.00000  0.00000  0.34571 CMYK OK
Page 4 0.00000  0.00000  0.00000  0.32637 CMYK OK
Page 5 0.00016  0.00035  0.00017  0.47061 CMYK OK
Page 6 0.00000  0.00000  0.00000  0.63394 CMYK OK
Page 7 0.00016  0.00035  0.00017  0.47061 CMYK OK


echo "$x" |awk '$3!=0{if(length(colored))colored=colored","$2;else colored=$2} END{print colored}'
2,5,7

Если столбец 3,4,5 должен быть 0, чтобы назвать строку цветным, то: (вы можете поиграться с этими условиями)

awk '$3!=0 &&  $4!=0 && $5!=0{if(length(colored))colored=colored","$2;else colored=$2} END{print colored}'

Обновить :

Вы можете использовать оператор ИЛИ (||), чтобы получить желаемый результат, как указано в вопросе.

echo "$x" |awk '$3!=0 ||  $4!=0 || $5!=0{if(length(colored))colored=colored","$2;else colored=$2} END{print colored}'
2,3,4,5,6,10,11
...