Linux在两个实例之间找到部分,并将它们写入多个输出

时间:2018-05-09 12:24:29

标签: linux awk

我有一个文件里面有PNG图像编码。我想从这个文件中提取PNG图像。每个PNG图像都以“PNG”开头,以“IEND”字结尾。该文件本身包含多个PNG图像(有279个匹配)。

如何在单独的文件中提取所有这些图像? 我尝试了很多sedawk命令,但我无法创建多个输出文件。例如

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文件代码,我想提取文件的那些部分)

This is the example of file

1 个答案:

答案 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;