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