La secuencia de commands de Shell lee por separado las columnas del file

Cuando tenemos un file que es un tipo de list como:

Mary 34 George 45 John 56 Josh 29 

usando el command awk $1 refiere a la primera columna y $2 a la segunda columna. Pero una vez que escribimos un script de shell podemos usar la read line de lectura para leer toda la línea o podemos usar el read number de lectura para leer la primera palabra, ¿estoy bien? ? Así que mi pregunta está en lo de arriba si quisiera leer la segunda columna, ¿cómo haré eso sin usar el command awk de un script de shell?

 while read firstcol secondqueuendtherest ; do something done < the_file 

es decir: cuando pones varios arguments para "leer", pone el primero en el primer arg, el 2º en el 2º arg, etc. En el último arg coloca el "rest de la línea".

algunos ejemplos:

 #if you want to read line by line: only 1 arg (therefore, it puts everyuthing in it, as the only arg is the last arg) while read whole_line ; do something with "$whole_line" done #if you only want only column 1 in $first, and everything else in $second_and_rest_of_line: while read first second_and_rest_of_line do something with "$first" and "$second_and_rest_of_line" done #if you only want col 1 and 2, and don't care about any extra cols: while read first second nonimportant do something with $first and "$second" #and we don't care about $nonimportant's content done 

Tenga en count que: realmente debe agregar la opción "-r" (para get input sin procesar) para leer, y modificar el IFS según lo que necesite … Pero los ejemplos anteriores son para discutir los "arguments", no la lectura correcta invocación. Consulte http://mywiki.wooledge.org/BashPitfalls para get información sobre esta y muchas otras sutilezas

 while read -a line; do echo -e "${line[1]}"; done < file 34 45 56 29 

donde el file contiene tu list.

En bash :

 $ read -a arr <<< 'Mary 34' $ echo "${arr[1]}" 34