我有一个文件里面有PNG图像编码。我想从这个文件中提取PNG图像。每个PNG图像都以“PNG”开头,以“IEND”字结尾。该文件本身包含多个PNG图像(有279个匹配)。
如何在单独的文件中提取所有这些图像?
我尝试了很多sed
和awk
命令,但我无法创建多个输出文件。例如
sed -n '/PNG/,/IEND/p' file1 > file2
如何制作279个PNG文件?
部分文件是:
PNG
... IHDR ......'......。...... Q5...... pHYs ..... ... IDATX 1 0W *BBpPxAqWĂC3EOEB+。ո9EθMb!/ ] XgY.5oǁC+қQhO(JqVRUq} BZE \Kw͙xfn $ xQ的及7)1Lw /一个{W1 .... .... IENDB` PNG
... IHDR ...&放大器; ... $ ... + ... ... gAMA..a sRGB的.... uPLTE d AGB“'koKO6: ”“ ”555Zpwp ..“ IDAT8v a= 1- 1 . om b 窴' ?byU} [ Ξ Թ8m ^8 / q L(I! L Bx( [An 3 5 u ] S &- a] F&安培;一个:Bh1G-9GCx(NkJTe-0%84 @ .D ִ1~ jV ̹l /: { ^ 3۩< )升)IeRcRCRp0gr»中.... IENDB` ..
这是我正在处理的文件:https://drive.google.com/open?id=1phPnEyGFWeHlXsGup9R35STf-NaGgFGR(图片也添加了以显示PNG文件代码,我想提取文件的那些部分)
答案 0 :(得分:1)
这个awk单行应该有所帮助:
awk '/PNG/{y=1}y{print > "file"i+1}/IEND/{y=0;i++}' file
测试:
kent$ cat f
PNG
1
2
IEND
PNG
3
4
IEND
PNG
5
IEND
kent$ awk '/PNG/{y=1}y{print > "file"i+1}/IEND/{y=0;i++}' f
kent$ head file*
==> file1 <==
PNG
1
2
IEND
==> file2 <==
PNG
3
4
IEND
==> file3 <==
PNG
5
IEND
将close("file"i+1)
添加到IEND
阻止:/IEND/{close("file"i+1);y=0;i++}
如果你有错误信息,那么&#34;打开了太多文件&#34;