多くの試行錯誤の末、私は実際にbashで最良で、最も明確で、最も簡単な多次元配列を見つけるのは、通常の変数を使用することです。うん。
利点:大きな配列をループする必要はありません。「$ var」をエコーして、grep / awk/sedを使用できます。簡単で明確で、好きなだけ列を作成できます。
例:
$ var=$(echo -e 'kris hansen oslo\nthomas jonson peru\nbibi abu johnsonville\njohnny lipp peru')
$ echo "$var"
kris hansen oslo
thomas johnson peru
bibi abu johnsonville
johnny lipp peru
ペルーのみんなを見つけたいなら
$ echo "$var" | grep peru
thomas johnson peru
johnny lipp peru
3番目のフィールドのgrep(sed)のみ
$ echo "$var" | sed -n -E '/(.+) (.+) peru/p'
thomas johnson peru
johnny lipp peru
xフィールドのみが必要な場合
$ echo "$var" | awk '{print $2}'
hansen
johnson
abu
johnny
トーマスと呼ばれるペルーの誰もが彼の姓を返す
$ echo "$var" |grep peru|grep thomas|awk '{print $2}'
johnson
あなたが考えることができるどんな質問でも...超簡単。
アイテムを変更するには:
$ var=$(echo "$var"|sed "s/thomas/pete/")
「x」を含む行を削除するには
$ var=$(echo "$var"|sed "/thomas/d")
別のアイテムの値に基づいて同じ行の別のフィールドを変更するには
$ var=$(echo "$var"|sed -E "s/(thomas) (.+) (.+)/\1 test \3/")
$ echo "$var"
kris hansen oslo
thomas test peru
bibi abu johnsonville
johnny lipp peru
もちろん、それをやりたいのであれば、ループも機能します
$ for i in "$var"; do echo "$i"; done
kris hansen oslo
thomas jonson peru
bibi abu johnsonville
johnny lipp peru
これで見つかった唯一の落とし穴は、常にvar(例ではvarとiの両方)を引用する必要があるということです。そうしないと、次のようになります。
$ for i in "$var"; do echo $i; done
kris hansen oslo thomas jonson peru bibi abu johnsonville johnny lipp peru
入力にスペースがあると機能しないと誰かが言うことは間違いありませんが、入力に別の区切り文字を使用することで修正できます。たとえば、(utf8文字を使用して、入力では選択できないものを選択できることを強調します)。含むが、あなたは何でも選ぶことができるc):
$ var=$(echo -e 'field one☥field two hello☥field three yes moin\nfield 1☥field 2☥field 3 dsdds aq')
$ for i in "$var"; do echo "$i"; done
field one☥field two hello☥field three yes moin
field 1☥field 2☥field 3 dsdds aq
$ echo "$var" | awk -F '☥' '{print $3}'
field three yes moin
field 3 dsdds aq
$ var=$(echo "$var"|sed -E "s/(field one)☥(.+)☥(.+)/\1☥test☥\3/")
$ echo "$var"
field one☥test☥field three yes moin
field 1☥field 2☥field 3 dsdds aq
入力に改行を格納する場合は、入力の前に改行を別の行に変換し、出力時に再度変換することができます(またはbashを使用しないでください...)。楽しみ!