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.
Itérer la chose avec un très grand nombre de lignes, cela devient vite inapproprié..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
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 :
Ce fut sans succès..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 for ((i=0;i<=NF;i++)) do echo e $(awk '{ print $i }' /home/toto.txt); done > but.txt
Merci d'avance
Partager