पर बैश पढ़ने से मैं एक एसोसिएटिव सरणी का उपयोग करके बैश में एक स्क्रिप्ट लिखने की कोशिश कर रहा हूं।एक फाइल से एक सहयोगी सरणी
a,b,c,d,e,f
g,h,i,j,k,l
निम्न स्क्रिप्ट:
a b ---> c d e f
g h ---> i j k l
पर बैश पढ़ने से मैं एक एसोसिएटिव सरणी का उपयोग करके बैश में एक स्क्रिप्ट लिखने की कोशिश कर रहा हूं।एक फाइल से एक सहयोगी सरणी
a,b,c,d,e,f
g,h,i,j,k,l
निम्न स्क्रिप्ट:
a b ---> c d e f
g h ---> i j k l
oldIFS=${IFS}
IFS=","
declare -A assoc
while read -a array
do
assoc["${array[0]}"]="${array[@]"
done
for key in ${!assoc[@]}
do
echo "${key} ---> ${assoc[${key}]}"
done
IFS=${oldIFS}
मुझे
a ---> a b c d e f
g ---> g h i j k l
मैं अपने उत्पादन की जरूरत होने के लिए देता है मैं एक फ़ाइल data
कहा जाता है
डेटा:
a,b,c,d,e,f
g,h,i,j,k,l
आउटपुट:
a b ---> c d e f
g h ---> i j k l
Substring Expansion
यहाँ का उपयोग करता है ${array[@]:2}
पाने के लिए assoc
सरणी के मूल्य के रूप में की जरूरत सबस्ट्रिंग। बैकस्लैश को बचने वाले चरित्र के रूप में कार्य करने से रोकने के लिए -r
read
भी जोड़ा गया।
@ gniourf_gniourf के सुझावों के आधार पर सुधार: `read` आदेश के लिए, 1. रखें` आईएफएस = `और नहीं बचत` IFS` और यह बहाल बेला के लिए:
declare -A assoc
while IFS=, read -r -a array
do
((${#array[@]} >= 2)) || continue
assoc["${array[@]:0:2}"]="${array[@]:2}"
done < data
for key in "${!assoc[@]}"
do
echo "${key} ---> ${assoc[${key}]}"
done
आप कुछ सुधार जोड़ सकता है । 2. लूप में 'जोड़ें (($ {# सरणी [@]}> = 2)) || जारी रखें 'या कुछ खाली लाइनों से छुटकारा पाने के समान। 3. अपना असाइनमेंट 'assoc ["$ {array [@] :: 2}"] = $ {array [@]: 2} 'के रूप में लिखें। –
@gniourf_gniourf, '$ {सरणी [@] :: 2}' '{{पैरामीटर: ऑफसेट: लंबाई} 'के रूप में' ओमेटेड 'ऑफसेट' के साथ 'और' ऑफसेट' शून्य माना जाता है? – Ashkan
हाँ, यह सही है! –