问候,
我有一个bash脚本可以解析我们从客户端收到的ZIP文件,并在匹配一组标准时解压缩它们。它运作良好,但速度很慢。特别是,以下功能:
function getCTLfile() {
for i in ${HDD_LIST_Array[@]}
do
if [[ `echo ${i}|awk -F . '{print $NF}'` == "ctl" ]]
then
echo "${i}"
fi
done
}
此功能的目的是获取ZIP文件中包含的控制文件的名称。因此,每个zip文件都获得HDD_LIST_Array[@]
:
HDD_LIST_Array=(`unzip -l $name | head -n -2|tail -n +4 | sort -r | awk '{print $4}'`)
同样,它虽然缓慢,但仍有效。可以优化此功能以更快地运行吗?有什么建议吗?
感谢。
答案 0 :(得分:3)
unzip -l
在输入文件名后获取匹配的文件模式,在找到它时返回0或在失败时返回11。
entry=$(unzip -l -qq "$name" '*.ctl')
if [ $? -eq 0 ]
then
awk '{ print $4 }' <<< "$entry"
done
答案 1 :(得分:0)
您可以使用cut
代替awk
和&&
代替if
,但如果有的话,这可能很小。我会假设你最大的挂钟是解压缩的IO,是吗?
在整个通话中加上time
命令以及unzip
前缀,以获得%差异。
其他:看起来你想只搜索和打印所有以*.ctl
结尾的文件或类似于行窗口(head | tail)的文件?您是否可以从解压缩输出中仅grep
或sed
?我打赌unzip -l |awk
脚本就足够了。我会在您提供更多详细信息时更新答案。
答案 2 :(得分:0)
只是补充一下mobrule的回复。
' - '出现在不需要的行中。您需要两个字符来区分,可能是':'或egrep' - [0-9]'