我想即时处理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
为什么我会收到此错误?谢谢
答案 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