我在 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')
问题是我同时执行这些代码很多次,我需要提高性能。 您知道如何修改代码以提高性能吗? 谢谢
不要在子 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