while循环任何一个可以建议我怎么以下优化while循环是一个shell脚本的一部分。优化与awk命令
function setvars() {
CONN_TSMP="$1"
USER="$2"
DB="$3"
IP="$4"
HOST="$5"
return
}
while read line; do
TST=`grep -w $line $FILE1`
ID=`echo $line | tr -d '\"'`
VARS=$(echo ${TST} | awk -F '"' '{print $2 " " $10 " " $22 " " $20 " " $18 }')
setvars $VARS
if [ -z "$IP" ]; then
IP=`echo "$HOST"`
fi
if [ "$USER" == "root" ] && [ -z $DB ]; then
TARGET=/home/database/data1/mysql_audit/sessions/root_sec
FILE=`echo "[email protected]$IP.txt"`
else
TARGET=/home/database/data1/mysql_audit/sessions/user_sec
FILE=`echo "[email protected]$IP.txt"`
fi
ls $TARGET/$FILE
if [ $? -ne 0 ]; then
echo -e "################################################################ \n" >> "$TARGET/$FILE"
echo "$TST" | awk -F 'STATUS="0"' '{print $2}'| sed "s/[</>]//g" >> "$TARGET/$FILE"
echo -e "\n" >> "$TARGET/$FILE"
fi
awk -F '"' '/"'$line'"/ {print "\n======================================\nTIMESTAMP=" $2 "\nSQLTEXT=" $10}' $FILE3 >> "$TARGET/$FILE"
done < "$FILE4"
据我观察AWK是花更多的时间。
任何一个可以帮助我如何写用AWK代码(while循环的AWK虽然上面示出环路,它替换整个)替换它或者通过去除AWK或优化上述代码的sed或的grep需要更多时间。
你用的是什么外壳? (Bash,Dash,Zsh,PDKsh,Ksh,POSIX兼容,Original-Sh兼容等) – konsolebox
在优化任何内容之前,您必须测量当前性能,确定目标,确定哪些步骤负责过多的时间,并确定是否有任何优化是可能的。你如何衡量性能,以及你如何确定'awk'是问题所在? –
bash shell ....我已经生成了测试用例,并计算了每个命令与测试用例所用的时间。 – vidyadhar