Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

awk et changement de ligne

6 réponses
Avatar
Doug713705
Bonjour à toutes, tous,

J'ai un fichier qui se présente sous la forme suivante :

toto data1 = tata
titi data1 = tutu

Que j'aimerai transformer en un fichier de la forme :
data1 toto tata titi tutu

Évidemment je n'y arrive pas et je sollicite votre aide.

Mon problème réside essentiellement dans le fait que les données qui
m'intéressent sont situées sur 2 lignes différentes.

Je pourrais probablement y arriver en plusieurs passes mais mon petit doigt
me dit qu'il y a moyen de faire beaucoup plus simple.

Est-il possible d'arriver au résultat attendu en une seule passe par une
commande awk bien sentie (éventuellement aidée par d'autres outils) et si
oui, laquelle ?

Merci d'avance pour vos réponses.
--
@+
Doug - Linux user #307925 - Slamd64 roulaize ;-)
[ Plus ou moins avec une chance de peut-être ]

6 réponses

Avatar
Nicolas George
Doug713705 wrote in message <gt22ul$2g51$:
Que j'aimerai transformer en un fichier de la forme :
data1 toto tata titi tutu



Tu peux essayer ceci :

echo data1 toto tata titi tutu

Ou alors tu peux essayer d'être un peu plus clair sur ce que tu veux faire
au juste.
Avatar
Alain Montfranc
Doug713705 a écrit
Bonjour à toutes, tous,

J'ai un fichier qui se présente sous la forme suivante :

toto data1 = tata
titi data1 = tutu



Que j'aimerai transformer en un fichier de la forme :
data1 toto tata titi tutu





C'est pas clair. Ton fichier ne fait que 2 lignes ? Ou faut il
regoruper les lignes par paires ? Quelles sont les invariants (tu dis
"de la forme suivante, mais qu'est ce qui est ficgé et qu'est ce qui
peut changer ?) ? etc...
Avatar
Doug713705
Le Sun, 26 Apr 2009 19:03:04 +0200, Alain Montfranc a écrit dans
news: des mots en forme de phrase pour nous
dire :

C'est pas clair. Ton fichier ne fait que 2 lignes ? Ou faut il regoruper
les lignes par paires ? Quelles sont les invariants (tu dis "de la forme
suivante, mais qu'est ce qui est ficgé et qu'est ce qui peut changer ?)
? etc...




Ah, pardon. Je vais essayer d'être plus clair.

Le fichier fait 400 lignes qui vont par 4.
Explication :
Dans chaque groupe de 4 lignes existe un et un seul invariant (précédemment
appelé data1) et 4 variables (précédemment appelées toto, tata, titi, tutu).

- Les variables sont systématiquement différentes même dans un même groupe
de 4 lignes.
- L'invariant change (!) toutes les 4 lignes (mais sa position devrait être
repérable puisque précédé d'un espace et suivi d'un signe = )

Typiquement :
toto data1 = tata
titi data1 = tutu
popo data1 = papa
pipi data1 = pupu

fofo data2 = fafa
fifi data2 = fufu
gogo data2 = gaga
gigi data2 = gugu

Le résultat recherché serait de la forme suivante :

data1 toto tata titi tutu popo papa pipi pupu
data2 fofo fafa fifi fufu gogo gaga gigi gugu

En espérant avoir été suffisamment clair.

Merci d'avance.
--
@+
Doug - Linux user #307925 - Slamd64 roulaize ;-)
[ Plus ou moins avec une chance de peut-être ]
Avatar
Doug713705
Le Sun, 26 Apr 2009 16:50:19 +0000, Nicolas George a écrit dans
news:49f490cb$0$5569$ des mots en forme de phrase
pour nous dire :

Que j'aimerai transformer en un fichier de la forme : data1 toto tata
titi tutu



Tu peux essayer ceci :

echo data1 toto tata titi tutu



Héhé, pas mal mais ça va être long !

Ou alors tu peux essayer d'être un peu plus clair sur ce que tu veux
faire au juste.



Voir la réponse que j'ai faite à Alain Montfranc.

Merci

--
@+
Doug - Linux user #307925 - Slamd64 roulaize ;-)
[ Plus ou moins avec une chance de peut-être ]
Avatar
Alain Montfranc
Doug713705 a écrit
Le Sun, 26 Apr 2009 19:03:04 +0200, Alain Montfranc a écrit dans
news: des mots en forme de phrase pour nous
dire :

C'est pas clair. Ton fichier ne fait que 2 lignes ? Ou faut il regoruper
les lignes par paires ? Quelles sont les invariants (tu dis "de la forme
suivante, mais qu'est ce qui est ficgé et qu'est ce qui peut changer ?)
? etc...




Ah, pardon. Je vais essayer d'être plus clair.

Le fichier fait 400 lignes qui vont par 4.
Explication :
Dans chaque groupe de 4 lignes existe un et un seul invariant (précédemment
appelé data1) et 4 variables (précédemment appelées toto, tata, titi, tutu).

- Les variables sont systématiquement différentes même dans un même groupe
de 4 lignes.
- L'invariant change (!) toutes les 4 lignes (mais sa position devrait être
repérable puisque précédé d'un espace et suivi d'un signe = )

Typiquement :
toto data1 = tata
titi data1 = tutu
popo data1 = papa
pipi data1 = pupu

fofo data2 = fafa
fifi data2 = fufu
gogo data2 = gaga
gigi data2 = gugu

Le résultat recherché serait de la forme suivante :

data1 toto tata titi tutu popo papa pipi pupu
data2 fofo fafa fifi fufu gogo gaga gigi gugu

En espérant avoir été suffisamment clair.

Merci d'avance.



Allez Quick and Dirty

awk -F' ' '
BEGIN { INVARIANT=""; STOCK="" }

/=/ {
if ( INVARIANT != "" && INVARIANT != $2 )
{
printf( "%s %sn", INVARIANT, STOCK )
STOCK=""
}
if ( STOCK != "" ) STOCK=STOCK " "
STOCK=STOCK $1 " " $4
INVARIANT=$2
}
END {
printf( "%s %sn", INVARIANT, STOCK )
}
'
Avatar
Doug713705
Le Sun, 26 Apr 2009 19:42:59 +0200, Alain Montfranc a écrit dans
news: des mots en forme de phrase pour nous
dire :

Allez Quick and Dirty



Merci beaucoup, je vais analyser tout ça et adapter à mon besoin.

--
@+
Doug - Linux user #307925 - Slamd64 roulaize ;-)
[ Plus ou moins avec une chance de peut-être ]