解压缩并处理压缩数据

时间:2018-07-15 22:04:32

标签: bash zip

我想即时处理zip文件,但是遇到问题。应用以下代码时。

for file in ./*.zip; do head -$(($(unzip -c $file | grep -n $channel_after | cut -f1,1 -d":"))) $file;done

这个想法是获得直到$ channel_after的所有行,即channel10。但是我得到以下输出

PK;��L�           ��p-marks.txtUTQ�K[Q�K[ux                                             ��342�020��。(��QH��K�.J-�56���2�00��g(d $楧�X�[�q���fh`+ .. @ ��                                          -��̭sRR�J�* A,��vQn�3������r,54���\ PK;��L。                  ��p-��marks.txtUTQ�K[ux

原始文件看起来像

12082008;pull done;ret=34;Y
08072008;push hanged;s=3;N
15082008;pull done;ret=34;Y
01062008;psuh done;ret=23;Y
18082007;old entry;old;N
08072008;push hanged;s=3;N
15082008;pull done;ret=34;Y
01062008;psuh done;ret=23;Y
18082007;old entry;old;N
08072008;push hanged;s=3;N
15082008;pull done;ret=34;Y
01062008;psuh done;ret=23;Y
18082007;old entry;old;N
08072008;push hanged;s=3;N
15082008;pull done;ret=34;Y
01062008;psuh done;ret=23;Y
18082007;old entry;old;N
Channel8
08072008;push hanged;s=3;N
15082008;pull done;ret=34;Y
01062008;psuh done;ret=23;Y
18082007;old entry;old;N
Channel9
08072008;push hanged;s=3;N
15082008;pull done;ret=34;Y
01062008;psuh done;ret=23;Y
18082007;old entry;old;N
Channel10
08072008;push hanged;s=3;N
15082008;pull done;ret=34;Y
01062008;psuh done;ret=23;Y
18082007;old entry;old;N

为什么我会收到此错误?谢谢

2 个答案:

答案 0 :(得分:1)

您正在将head应用到原始zipfile而不解压缩:head的第一个参数是使用命令替换的算术扩展,第二个参数是$ file。 head不知道如何读取zip文件。

我将示例数据另存为marks.txt并用

压缩
zip 1.zip marks.txt

然后我可以跑步

channel_after=Channel8
for file in 1.zip ; do
    head -$(($(unzip -c $file | grep -n $channel_after | cut -f1,1 -d":"))) \
        <(unzip -c $file)
done

可以打印直到Channel8的所有行。

答案 1 :(得分:1)

您的版本是:

for file in ./*.zip; do head -$(($(unzip -c $file | grep -n $channel_after | cut -f1,1 -d":"))) $file;done

您应该做的是:

for file in ./*.zip; do head -$(($(unzip -c $file | grep -n $channel_after | cut -f1,1 -d":"))) <(unzip -c $file);done