Po wielu próbach i błędach znajduję najlepszą, najłatwiejszą i najłatwiejszą wielowymiarową tablicę na bashie, używając zwykłego var. Tak.
Zalety: Nie musisz przechodzić przez dużą tablicę, możesz po prostu powtórzyć "$ var" i użyć grep/awk/sed. Jest to łatwe i jasne i możesz mieć tyle kolumn, ile chcesz.
Przykład:
$ 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
Jeśli chcesz znaleźć każdy w Peru
$ echo "$var" | grep peru
thomas johnson peru
johnny lipp peru
Tylko grep (SED) w polu trzecim
$ echo "$var" | sed -n -E '/(.+) (.+) peru/p'
thomas johnson peru
johnny lipp peru
Jeśli chcesz tylko x pole
$ echo "$var" | awk '{print $2}'
hansen
johnson
abu
johnny
Wszyscy w Peru, które nazywa się Thomas i po prostu wrócić jego lastName
$ echo "$var" |grep peru|grep thomas|awk '{print $2}'
johnson
Wszelkie zapytania można myśleć ... SuperEasy.
Aby zmienić element:
$ var=$(echo "$var"|sed "s/thomas/pete/")
Aby usunąć wiersz zawierający „x”
$ var=$(echo "$var"|sed "/thomas/d")
Aby zmienić kolejne pole w tym samym rzędzie na podstawie wartości od innego elementu
$ var=$(echo "$var"|sed -E "s/(thomas) (.+) (.+)/\1 test \3/")
$ echo "$var"
kris hansen oslo
thomas test peru
bibi abu johnsonville
johnny lipp peru
Oczywiście działa również pętla, jeśli chcesz to zrobić:
$ for i in "$var"; do echo "$i"; done
kris hansen oslo
thomas jonson peru
bibi abu johnsonville
johnny lipp peru
Jedynym haczyka Iv'e gatunki z tego jest to, że koniecznością zawsze zacytować var (w przykładzie; zarówno var i I) lub rzeczy będą wyglądać tak
$ for i in "$var"; do echo $i; done
kris hansen oslo thomas jonson peru bibi abu johnsonville johnny lipp peru
i ktoś z pewnością powiedzieć, że to nie będzie działać, jeśli masz przestrzenie w wejściu, jednak, że mogą być mocowane za pomocą innego separatorem w wejściu, np (przy użyciu char utf8 teraz podkreślić, że można wybrać coś wasz wkład nie będą zawierać, ale można wybrać niezależnie OFC):
$ 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
Jeśli chcesz zapisać nowe linie w swoim wejściu, można konwertować przełamane do czegoś innego przed wprowadzeniem i przekonwertuj go z powrotem na wyjście (lub nie używaj bash ...). Cieszyć się!
Powiązane: [Jak zadeklarować tablicę 2D w bashie] (http://stackoverflow.com/q/16487258/55075) – kenorb