Linux
使用循環解析並將行號分配給文件
這有點複雜。我有一個配置文件。它看起來像這樣。
customer="airtel" model_name=fast programmer_typ_of="dev"
現在第一列包含所有鍵,後面的
=
就是每個鍵的值。就像這樣的格式:key=value
我如何編寫一個函式,它將呼叫這樣的文件並將每個鍵和值儲存到兩個單獨的數組中,其中每個數組的相同位置將包含相應的鍵和值。請注意,我不能在函式中的任何地方使用我的密鑰名稱,也不能使用確切的密鑰名稱進行 grep。或者,我已經想到了一種解決此問題的方法,即通過將行號分配給配置文件並基於在
grep
循環中使用以查找各個行號來“剪切”每個鍵和值對。像這樣的東西:function parse() { i=0 declare -a arr1 declare -a arr2 cat -n model.conf #assigns row numbers to model.conf while true; do var1=$(cat model.conf | grep ^$i | cut -d '=' -f1) #gets the key and stores it in variable var1 var2=$(cat model.conf | grep ^$i | cut -d '=' -f2) #gets the value and stores it in variable var2 arr1[$i]=$var1 #array containing keys arr2[$i]=$var2 #array containing values i=$(( $i + 1 )) done }
如果你能告訴我這個函式有什麼問題,或者你能建議一些其他方法來獲取不同數組中的單獨鍵值對。
使用 awk:
eval $(awk -F= -v i=0 '{print "arr1["i"]="$1";arr2["i"]="$2;i++}' model.conf)
使用
=
as 欄位分隔符和i
具有初始值的變數0
,將為每一行awk
列印,其中將具有鍵,並將具有每行的值和增量。"arr1["i"]="$1";arr2["i"]="$2``$1``$1``i
awk -F= -v i=0 '{print "arr1["i"]="$1";arr2["i"]="$2;i++}' model.conf
輸出/輸出:arr1[0]=customer;arr2[0]="airtel" arr1[1]=model_name;arr2[1]=fast arr1[3]=programmer_typ_of;arr2[3]="dev"
然後
eval
在 awk 輸出上使用來分配數組。