2012-09-07 5 views
4

J'essaie de faire une boucle sur un fichier qui a un nombre de lignes avec plusieurs colonnes (champs) avec des conditions.Boucle à travers les lignes et plusieurs colonnes dans bash

Voici ce qu'un exemple de fichier (file.txt) ressemble à:

aaa bbb ccc 
ddd kkk 
fff ggg hhh lll 
ooo 
sss 

... etc ...

Je veux écrire un script bash qui boucle sur la première ligne du premier champ et si le nom existe alors continue à la deuxième rangée. Si le nom de la première ligne du premier champ n'existe pas, testez le deuxième champ (dans ce cas, testez le nom "bbb") et ainsi de suite jusqu'au quatrième. J'ai un nombre variable de champs avec un maximum de quatre (4) champs et un minimum d'un champ (colonne) pour une ligne donnée.

for i in cat file.txt; do 
    echo $i 
    if [ -e $i ]; then 
     echo "name exists" 
    else 
     echo "name does not exist" 
    fi 
done 

Évidemment, le script ci-dessus teste les lignes et les colonnes. Mais je voulais aussi faire une boucle vers les deuxième, troisième et quatrième champs si le premier champ n'existe pas et si le deuxième champ n'existe pas, tester le troisième champ et le quatrième.

Répondre

8

Je pense que ce que vous essayez vraiment de faire est de lire le fichier ligne par ligne plutôt que mot par mot. Vous pouvez le faire avec while et read. Comme:

while read field1 field2 field3 field4; do 
    if [ -e "$field1" ]; then 
    something 
    elif [ -e "$field2" ]; then 
     ... 
    fi 
done < file.txt 
+0

Interroger la motivation OP ne répond pas à la question. – hakre

+0

L'interprétation de la requête, la proposition d'une approche (ligne par ligne au lieu de mot par mot), puis la fourniture d'une réponse correcte correctement, comptent comme réponse à la question. – AndrewF

Questions connexes