获取一条线的值,有关性能的建议

问题描述 投票:0回答:1

我在 bash 脚本中有代码来提取变量中的一些值。 文字是:

ct: I al: 3669619 dc: SERVERA mn: CAR or: 19qrh sv: R st: Not_Noticed stt: 2024
0411151219 lu: lt: ms: THAT'S MESAGE run_as: USER sb
: TRADE ap: APPLICATION. jb: JDFSSS ho: HOSTA al: R closed_from_em: nb:
cn: 00000000001

我的代码是:

line=$(echo $*)
jo=$(echo $* | awk '{print $6":"$9}')
dc=$(echo $* | awk '{print $6}')
aid=$(echo $* | sed 's/.* al:\(.*\) dc.*/\1/' | sed 's/^ //g')
or=$(echo $* | sed 's/.* or:\(.*\) sv.*/\1/' | sed 's/^ //g')
jb=$(echo $* | sed 's/.* jb:\(.*\) ho.*/\1/' | sed 's/^ //g')
ms=$(echo $* | sed 's/.* ms:\(.*\) run_as.*/\1/' | sed 's/^ //g')
callType=$(echo $* | sed 's/ct:\(.*\) al.*/\1/' | sed 's/^ //g')
sv=$(echo $* | sed 's/.* sv:\(.*\) st.*/\1/' | sed 's/^ //g')
st=$(echo $* | sed 's/.* st:\(.*\) stt.*/\1/'|  sed 's/^ //g')
sendTime=$(echo $* | sed 's/.* stt:\(.*\) lu.*/\1/' | sed 's/^ //g')
ru=$(echo $* | sed 's/.* run_as:\(.*\) sb.*/\1/' | sed 's/^ //g')
sb=$(echo $* | sed 's/.* sb:\(.*\) ap.*/\1/' | sed 's/^ //g')
ap=$(echo $* | sed 's/.* ap:\(.*\) jb.*/\1/' | sed 's/^ //g')
ho=$(echo $* | sed 's/.* ho:\(.*\) al.*/\1/' | sed 's/^ //g')
al=$(echo $* | sed 's/.* al:\(.*\) closed_from.*/\1/' | sed 's/^ //g')

问题是我同时执行这些代码很多次,我需要提高性能。 您知道如何修改代码以提高性能吗? 谢谢

bash awk sed
1个回答
0
投票

不要在子 shell 中运行多个命令来填充每个变量,而是使用 参数扩展 。它发生在同一个 shell 中,这意味着速度要快得多。它不像

sed
awk
那么强大,但幸运的是,你在这里不需要它:

while read line ; do
    set -- $line
    jo=$6:$9
    dc=$6
    aid=${line#* al: }; aid=${aid% dc:*}
    or=${line#* or: }; or=${or% sv:*}
    jb=${line#* jb: }; jb=${jb% ho:*}
    ms=${line#* ms: }; ms=${ms% run_as*}
    callType=${line#ct: }; callType=${callType%% al:*}
    sv=${line#* sv: }; sv=${sv% st:*}
    st=${line#* st: }; st=${st% stt:*}
    sendTime=${line#* stt: }; sendTime=${sendTime% lu:*}
    ru=${line#* run_as: }; ru=${ru% sb:*}
    sb=${line#* sb: }; sb=${sb% ap:*}
    ap=${line#* ap: }; ap=${ap% jb:*}
    ho=${line#* ho: }; ho=${ho% al:*}
    al=${line##* al: }; al=${al% closed_from*}

    echo "JO: $jo."
    echo "DC: $dc."
    echo "AID: $aid."
    echo "OR: $or."
    echo "JB :$jb."
    echo "MS: $ms."
    echo "CALLTYPE: $callType."
    echo "SV: $sv."
    echo "ST: $st."
    echo "SENDTIME: $sendTime."
    echo "RU: $ru."
    echo "SB: $sb."
    echo "AP: $ap."
    echo "HO: $ho."
    echo "AL: $al."
done
© www.soinside.com 2019 - 2024. All rights reserved.