128 votes

Comment analyser un fichier CSV en Bash?

Je travaille sur un long script Bash. Je veux lire des cellules d'un fichier CSV dans des variables Bash. Je peux analyser les lignes et la première colonne, mais pas les autres colonnes. Voici mon code jusqu'à présent :

  cat myfile.csv | while read line
  do
    read -d, col1 col2 < <(echo $line)
    echo "J'ai obtenu : $col1 | $col2"
  done

Il ne imprime que la première colonne. Pour un test supplémentaire, j'ai essayé ce qui suit :

read -d, x y < <(echo a,b,)

Et $y est vide. J'ai donc essayé :

read x y < <(echo a b)

Et $y est b. Pourquoi ?

7 votes

Avez-vous envisagé d'utiliser awk pour utiliser $1, $2, etc?

4 votes

En tant que note de côté: commande < <(echo "string") ---> commande <<< "string"

1 votes

Le programme en ligne de commande 'cut' a été conçu à cet effet : ss64.com/bash/cut.html

0voto

Eliya Points 41

Si vous souhaitez lire un fichier CSV avec certaines lignes, voici la solution.

while IFS=, read -ra line
do 
    test $i -eq 1 && ((i=i+1)) && continue
    for col_val in ${line[@]}
    do
        echo -n "$col_val|"                 
    done
    echo        
done < "$csvFile"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X