arrays - usan - tabulaciones en word 2016
Lea la lĂnea de archivo separada por tabulaciones en la matriz (3)
Estás muy cerca:
while IFS=$''/t'' read -r -a myArray
do
echo "${myArray[0]}"
echo "${myArray[1]}"
echo "${myArray[2]}"
done < myfile
(La -r
dice que /
no es especial en los datos de entrada; la -a myArray
le dice que divida la línea de entrada en palabras y almacene los resultados en myArray
; y la IFS=$''/t''
le dice a use solo las pestañas para dividir las palabras, en lugar del valor predeterminado normal de Bash también permite que los espacios también dividan las palabras. Tenga en cuenta que este enfoque tratará una o más pestañas como delimitador, por lo que si algún campo está en blanco, los campos posteriores se cambiarán "en posiciones anteriores en la matriz. ¿Está bien?)
Me gustaría leer un archivo en un script, línea por línea. Cada línea del archivo tiene varios valores separados por una pestaña, me gustaría leer cada línea en una matriz.
Ejemplo típico de bash "leer archivo por línea";
while read line
do
echo $line;
done < "myfile"
Para mí, sin embargo, myfile tiene este aspecto (valores separados por tabulaciones);
value1 value2 value3
value4 value5 value6
En cada iteración del bucle, me gustaría que cada línea entrara en una matriz para poder
while read line into myArray
do
echo myArray[0]
echo myArray[1]
echo myArray[2]
done < "myfile"
Esto imprimiría lo siguiente en la primera iteración del bucle;
value1
value2
value3
Luego en la segunda iteración se imprimiría
value4
value5
value6
es posible? La única manera que puedo ver es escribir una pequeña función para desglosar los valores manualmente, ¿hay soporte integrado en bash para esto?
Si realmente desea dividir cada palabra (significado bash) en un índice de matriz diferente, cambiando completamente la matriz en cada iteración de bucle while, la respuesta de @ ruakh es el enfoque correcto. Pero puede usar la propiedad de lectura para dividir cada palabra leída en diferentes variables column1
, column2
, column3
como en este fragmento de código
while IFS=$''/t'' read -r column1 column2 column3 ; do
printf "%b/n" "column1<${column1}>"
printf "%b/n" "column2<${column2}>"
printf "%b/n" "column3<${column3}>"
done < "myfile"
para alcanzar un resultado similar evitando el acceso al índice de matriz y mejorando la legibilidad de su código mediante el uso de nombres de variables significativos (por supuesto, el uso de columnN
no es una buena idea).
También podrías intentarlo,
OIFS=$IFS;
IFS="/t";
animals=`cat animals.txt`
animalArray=$animals;
for animal in $animalArray
do
echo $animal
done
IFS=$OIFS;