如何获取PDF格式的逗号分隔页面列表?

问题描述 投票:0回答:1

考虑这个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 '$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。

list pdf sed grep ghostscript
1个回答
0
投票
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

如果col 3,4,5需要0调用一行颜色然后:(你可以玩这些条件)

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

更新:

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

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
© www.soinside.com 2019 - 2024. All rights reserved.