web-dev-qa-db-fra.com

Comment canaliser un fichier ligne par ligne dans plusieurs variables de lecture?

J'ai un fichier qui contient des informations dans deux colonnes:

box1 a1
box2 a2

J'essaie de lire ce fichier ligne par ligne dans read et de placer chaque élément de ligne dans une variable.

Au premier passage, $a contiendrait box1 et $b contiendrait a1.

Au deuxième passage, $a contiendrait box2 et $b contiendrait a2, etc.

Un exemple du code que j'utilise pour essayer de réaliser est le suivant:

for i in text.txt; do
    while read line; do
        echo $line | read a b;
    done < text.txt;
    echo $a $b;
done

Cela me donne les résultats suivants:

box1 a1 box2 a2

Quand je m'attendais aux résultats suivants:

box1 a1
box2 a1

Comment puis-je réparer cela?

15
mlebel

L'ajout d'une commande read entraîne la définition des variables dans un sous-shell, ce qui les rend inaccessibles (en fait, elles ont disparu) au reste de votre code. Dans ce cas, cependant, vous n'avez même pas besoin de la boucle for ou de la deuxième commande read:

while read -r a b; do
    echo "$a" "$b"
done < text.txt
42
chepner