我正在傳遞一個引數,該引數我必須在檔案中匹配并提取資訊。請問我怎樣才能得到它?
例子:
我在檔案中有以下詳細資訊-
iMedical_Refined_load_Procs_task_id=970113
HV_Rawlayer_Execution_Process=988835
iMedical_HV_Refined_Load=988836
DHS_RawLayer_Execution_Process=988833
iMedical_DHS_Refined_Load=988834
如果我將 'hv' 作為引數傳遞,那么它應該選擇 'iMedical_HV_Refined_Load' 并給出結果 - '988836'
如果我傳遞 'dhs',那么它應該選擇 - 'iMedical_DHS_Refined_Load' 并給出結果 = '988834'
我嘗試了以下邏輯,但沒有正確給出結果。我需要做什么改變-
echo $1 | tr a-z A-Z
g=${1^^}
echo $g
echo $1
val=$(awk -F= -v s="$g" '$g ~ s{print $2}' /medaff/Scripts/Aggrify/sltconfig.cfg)
echo "TASK ID is $val"
uj5u.com熱心網友回復:
假設您的匹配條件是分隔符之后的第一個字串,_并且需要的輸出是=字符之后的數字,那么您可以試試這個sed
$ sed -n "/_$1/I{s/[^=]*=\(.*\)/\1/p}" input_file
$ read -r input
hv
$ sed -n "/_$input/I{s/[^=]*=\(.*\)/\1/p}" input_file
988836
$ read -r input
dhs
$ sed -n "/_$input/I{s/[^=]*=\(.*\)/\1/p}" input_file
988834
uj5u.com熱心網友回復:
如果我沒看錯的話,2個快速版本-
$: cat 1
awk -F= -v s="_${1^^}_" '$1~s{print $2}' file
$: cat 2
sed -En "/_${1^^}_/{s/^.*=//;p;}" file
兩者的邏輯基本相同。
在純粹的 bash -
$: cat 3
while IFS='=' read key val; do [[ "$key" =~ "_${1^^}_" ]] && echo "$val"; done < file
不過,這效率要低得多。
如果您確定只有一次命中,那么所有這些都可以通過短路出口來改善一點,但是對于這么小的樣本,這根本不重要。如果您要讀取更大的資料集,那么我強烈建議您將規范形式化而不是“在這個集合中我應該得到......”。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/440891.html
上一篇:使用管道跨子行程通信
