Script shell boucle affichage
Bonjour à tous,
J'ai un petit souci que je n'arrive pas à régler avec mon script shell.
Je possède un fichier qui contient 10 lignes, chaque ligne possède un grand nombre de champs. Pour simplifier.
Fichier toto.txt :
______________________
|a1 a2 a3 a4 a5 .….... an |
|b1 b2 b3 b4 b5 ……....bn |
|c1 c2 c3 c4 c5 …....…cn |
|………………………………….....|
|j1 j2 j3 j4 j5 …….……....jn|
|_____________________|
Mon but est ainsi de concaténer les numéros de champs des dix lignes pour avoir en sortie dans un nouveau fichier :
Fichier but.txt
__________________________
|a1 b1 c1 d1 e1 f1 g1 h1 i1 j1 |
|a2 b2 c2 d2 e2 f2 g2 h2 i2 j2 |
|a3 b3 c3 d3 e3 f3 g3 h3 i3 j3 |
|…………………………………………..…|
|an bn cn dn en fn gn hn in jn |
|_________________________|
J’arrive à le faire avec une méthode actuelle.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| #!/bin/bash
# affiche les premiers éléments de chaque ligne a la suite
a1=`awk '{ print $1 }' /home/toto.txt`;
echo e \n $a1 \n;
#résultats : a1 b1 c1 d1 e1 f1 g1 h1 i1 j1
# affiche les seconds éléments de chaque ligne a la suite
a2=`awk '{ print $2 }' /home/toto.txt`;
echo e \n $a2 \n;
#résultats : a2 b2 c2 d2 e2 f2 g2 h2 i2 j2 |
Itérer la chose avec un très grand nombre de lignes, cela devient vite inapproprié..
J’aimerai faire une boucle qui permet directement afficher les éléments comme mon fichier but.txt le montre. Si vous pouviez me donner un coup de pouce s’il vous plait.. J’ai bien abordé le problème avec des for et des while mais l’affichage n’était pas correct.
Par exemple :
Code:
1 2 3 4
| for ((i=0;i<=NF;i++))
do
echo e $(awk '{ print $i }' /home/toto.txt);
done > but.txt |
Ce fut sans succès..
Merci d'avance
Script shell boucle affichage
Merci à vous N_BaH et jmelyn pour vos réponses. Elles sont très interressantes. J'ai choisis la simplicité avec la boucle du troisième poste.
J'ai maintenant compris pourquoi ma boucle ne marchait pas..
Autant dire un grand merci à vous!