:
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}
bana
a ---> a b c d e f
g ---> g h i j k l
ben olmak benim çıkış gerek verir bir dosya data
denilen var
veriler:
a,b,c,d,e,f
g,h,i,j,k,l
Çıktı:
a b ---> c d e f
g h ---> i j k l
almak için buraya ${array[@]:2}
Substring Expansion
kullanır assoc
dizinin değeri olarak gerekli alt dize. Ters eğik çizgi bir kaçış karakteri olarak hareket etmesini önlemek için -r
ila read
'a eklendi.
@ gniourf_gniourf önerilerine göre Geliştirilmiş: 'Oku' komutu için `, 1. koyun` IFS = değil `tasarrufu IFS` ve restore keman var:
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
Birkaç iyileştirmeler ekleyebilirsiniz . 2. Döngüde ekle '(($ {# dizi [@]}> = 2)) || devam ya da boş satırlardan kurtulmak için benzer bir şey. 3. Ödevinizi "assoc [" $ {array [@] :: 2} "] = $ {array [@]: 2}' olarak yazın. –
@gniourf_gniourf, $ $ {array [@] :: 2} '$ {parameter: offset: length} 'biçimini ommited' offset ile ve sonra offset' sıfır olarak mı varsayılır? – Ashkan
Evet, doğru! –