Ma scusate ... state parlando di parsare una stringa fatta di campi separati da spazio
dentro uno script awk (la stringa e' una variabile awk), o di parsare la stringa a mano ("da terminale") o in uno shell script (la stringa e' una variabile di shell o variabile di environment)?
Nel primo caso si usa la funzione split di awk, dentro awk, senza proliferazione di processi pipando echo, altri awk ecc. ecc.
Nel secondo caso esiste il comando "cut" (fare man cut).
A parte che non conosco la sintassi delle variabili bash, dato che uso tcsh, almeno in tcsh una variabile puo' addirittura essere un array
nativamente o no, Confrontare (in tcsh):
cosi' a e' una variabile di shell scalare il cui valore e' una stringa con degli imbedded blanks
Codice: Seleziona tutto
set a = 'cane gatto'
echo $a -> cane gatto
echo $a[1] -> cane gatto
echo $a[2] -> a: Subscript out of range.
cosi a e' un array con due elementi
Codice: Seleziona tutto
set a = (cane gatto)
echo $a[1] -> cane
echo $a[2] -> gatto
Questo invece (a parte l'assignment della variabile che e' shell-dependent) funziona in qualsiasi shell, usando cut che e' un comando a se'
Codice: Seleziona tutto
set a = 'cane gatto'
echo $a | cut -d" " -f1
echo $a | cut -d" " -f2
cut prende il campo (field, -f) 1 o 2 usando come separatore (-d) uno spazio bianco (" "). cut puo' anche essere usato per parsare con altri separatori, o anche per parsare caratteri o sottostrimghe per range
The reasonable man adapts himself to the world: the unreasonable one persists in trying to adapt the world to himself. Therefore all progress depends on the unreasonable man. (G.B. Shaw)