0

シェル スクリプトの一部である while ループの下で最適化する方法を教えてください。

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 "$ID-$CONN_TSMP-$USER@$IP.txt"`

        else

                TARGET=/home/database/data1/mysql_audit/sessions/user_sec
                FILE=`echo "$ID-$CONN_TSMP-$USER@$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 while ループ) に置き換えるか、より時間がかかるawkまたはsedまたはgrepを削除することにより、上記のコードを最適化する方法を教えてください。

4

1 に答える 1