如何在 PDF 中获取以逗号分隔的彩色页面列表?

How to get a comma-separated list of pages with color in a PDF?

考虑此 PDF 'colorpages.pdf' 链接 here

我有两个命令要知道 a) 我的 PDF 中有多少彩色页面 b) 在哪个页面上使用了颜色。

对于 a) 我使用

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

然后我得到一个数字(带颜色的页面总数)。

对于 b) 我使用

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 '!=0 && !=0 && !=0{if(length(colored))colored=colored",";else colored=} END{print colored}'

给出了以下列表 1,2,3,4,5,6,7,8,9,10,11,12。 但是应该是2,3,4,5,6,10,11.

awk '!=0{if(length(colored))colored=colored",";else colored=} 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 '!=0{if(length(colored))colored=colored",";else colored=} END{print colored}'
2,5,7

如果第 3、4、5 列需要 0 才能调用彩色行,则 :(您可以使用这些条件)

awk '!=0 &&  !=0 && !=0{if(length(colored))colored=colored",";else colored=} END{print colored}'

更新:

您可以使用 OR 运算符(||) 来获得问题中提到的所需结果。

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