Accoler deux "blocs" de lignes qui se suivent

Résolu/Fermé
jil - Modifié par jil le 29/05/2012 à 11:42
 jil - 29 mai 2012 à 17:47
Bonjour,

j'ai un fichier qui contient une ligne d'entête et ensuite N lignes, disons 8 pour l'exemple (N est forcément pair).

- les N/2 (4) lignes suivants la première contiennent des noms d'échantillons.

- les N/2 (4) qui suivent les précédentes, contiennent des valeurs calculées sur lesdits échantillons, dans le même ordre.

J'aimerai mettre ces lignes "à côté" des 4 précédentes.

Exemple concret, cat ~/fichier.txt :

Sample Indice1 Indice2 IndiceTotal 
A 
B 
C 
F 
1.456 2.45 3.699 
1.787 1.83 2.56 
1.98 1.503 4.550 
1.2 1.189 2.86 


et j'aimerai que ça devienne ça :
Sample Indice1 Indice2 IndiceTotal 
A 1.456 2.45 3.699 
B 1.787 1.83 2.56 
C 1.98 1.503 4.550 
F 1.2 1.189 2.86 


je tourne un peu en rond avec 'sed' mais peut-être qu'il y a mieux.
Remarque importante : un fichier peut comporter 8 lignes (sans l'entete) comme ici, mais un autre peut en contenir un nombre différent, 12, ou 18, ou 24, peu importe, il faudrait que ça puisse fonctionner dans tous les cas.


Merci de vos tuyaux.
ps : Je suis sous Ubuntu.
A voir également:

2 réponses

dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
29 mai 2012 à 12:21
hello
$ awk '{x[NR]=$0} END{print x[1] ; --NR;for(n=2;n<=NR/2+1;n++)print x[n], x[n+NR/2]}' fichier.txt
Sample Indice1 Indice2 IndiceTotal 
A  1.456 2.45 3.699 
B  1.787 1.83 2.56 
C  1.98 1.503 4.550 
F  1.2 1.189 2.86 
$
0
Fichtre.
C'est du awk qui roule ça...

$ awk '{x[NR]=$0} END{print x[1] ; --NR;for(n=2;n<=NR/2+1;n++)print x[n], x[n+NR/2]}' monfichier.txt > output.txt

donne le résultat escompté, merci mille fois dubcek, t'es doué avec cette commande !
0