El comando mapfile ofrece una solución poderosa pero simple, que le permite leer sin esfuerzo líneas desde una entrada estándar (o un descriptor de archivo específico) en una variable de matriz. mapfile está disponible en Bash versión 4.0 y posteriores. La estructura de mando es la siguiente:
mapfile [options] array_variable < input_file
En el siguiente ejemplo, veremos cómo procesar datos CSV. Supongamos que tenemos un archivo CSV con los siguientes datos.
1 2 |
Alice,25,alice@example.com Bob,30,bob@example.com |
Al proceesar el archivo CVS «data.cvs», necesitamos separar las filas y tambien las columnas. Esto para mostarr los campos por separado de cada linea
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#!/bin/bash input_file="data.csv" mapfile -t csv_data < "$input_file" for line in "${csv_data[@]}"; do mapfile -t -d ‘,’ fields_array <<< “$line” name=”${fields_array[0]}” age=”${fields_array[1]}” email=”${fields_array[2]}” echo "Name: $name, Age: $age, Email: $email" done |
Al ejecutarlo nos mostrara el siguiente resultado :
1 2 3 |
bash cvs.sh Name: Alice, Age: 25, Email: alice@example.com Name: Bob, Age: 30, Email: bob@example.com |