Transformer un txt file en nouveau txt file

Résolu/Fermé
k34450 Messages postés 6 Date d'inscription dimanche 20 octobre 2013 Statut Membre Dernière intervention 21 octobre 2013 - 20 oct. 2013 à 18:08
k34450 Messages postés 6 Date d'inscription dimanche 20 octobre 2013 Statut Membre Dernière intervention 21 octobre 2013 - 21 oct. 2013 à 14:00
Bonjour à tous.

Sous mon environnement unix,
Le contenu de mon fichier texte source se présente comme suit:
'S1234567|123'
'OLT'
'456.0000'
'RIT'
'0'
'S9876543|456'
'OLT'
'34235.0000'
'RIT'
'9876.0000'
'S2468642|789'
'OLT'
'7654.0000'
'RIT'
'43215.0000'

Je souhaiterai avoir un fichier en sortie comme suit:

'S1234567|123';'OLT';'456.0000';'RIT';'0';
'S9876543|456';'OLT';'34235.0000';'RIT';'9876.0000';
'S2468642|789';'OLT';'7654.0000';'RIT';'43215.0000';

N'étant pas très familiarisé avec les outils de scripting shell, awk, sed.
Quelqu'un aurait-il une idée comment faire ?
Merci de bien vouloir m'aider .
k34450 ;-)
A voir également:

6 réponses

dubcek Messages postés 18764 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 9 février 2025 5 624
21 oct. 2013 à 11:16
en utilisant une ligne contenant | comme séparateur
$ awk '/[|]/ && n++ {print ""} {printf $0 ";"} END {print ""}' fichier
'S1234567|123';'OLT';'456.0000';'RIT';'0';
'S9876543|456';'OLT';'34235.0000';'RIT';'9876.0000';
'S2468642|789';'OLT';'7654.0000';'RIT';'43215.0000';
$
2
k34450 Messages postés 6 Date d'inscription dimanche 20 octobre 2013 Statut Membre Dernière intervention 21 octobre 2013
21 oct. 2013 à 14:00
Hi dubeck, zipe 31
C'est parfait ça marche avec ta commande et nawk

Un grand merci à vous 2
Salutations
K34450;-))
0
dubcek Messages postés 18764 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 9 février 2025 5 624
21 oct. 2013 à 09:15
hello
$ awk '{printf $0 ";"} !(NR%5) {print ""}' fichier
'S1234567|123';'OLT';'456.0000';'RIT';'0';
'S9876543|456';'OLT';'34235.0000';'RIT';'9876.0000';
'S2468642|789';'OLT';'7654.0000';'RIT';'43215.0000';
$
1
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 422
21 oct. 2013 à 09:40
Salut,

Bien joué, mais s'il y a plus de 5 champs, t'es mal ;-))
0
dubcek Messages postés 18764 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 9 février 2025 5 624
21 oct. 2013 à 09:45
NR%7 non ?
quel est le critère pour passer à la ligne ?

PS: il te manque les ; en fin de ligne
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 422
21 oct. 2013 à 10:33
NR%7 non ?
Oui, je me doute.

quel est le critère pour passer à la ligne ?
On n'en sait rien, perso je me suis basé sur une ligne commençant par
'S
, d'où mon clin d'oeil sur le nombre de champs ;-)

PS: il te manque les ; en fin de ligne
Effectivement je n'avais pas fais attention ;-\
sed -n '1h;:z;$ba;n;/^\x27S/ba;H;bz;:a;x;s/\n\|$/;/g;p;d'

Merci.
0
k34450 Messages postés 6 Date d'inscription dimanche 20 octobre 2013 Statut Membre Dernière intervention 21 octobre 2013
21 oct. 2013 à 10:53
Hello dubeck

La ça marche mais effectivement de temps en temps il y a plus de 5 champs.
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 422
21 oct. 2013 à 08:45
Salut,

$ cat plop 
'S1234567|123'
'OLT'
'456.0000'
'RIT'
'0'
'S9876543|456'
'OLT'
'34235.0000'
'RIT'
'9876.0000'
'S2468642|789'
'OLT'
'7654.0000'
'RIT'
'43215.0000'

$ sed -n '1h;:z;$ba;n;/^\x27S/ba;H;bz;:a;x;s/\n/;/g;p;d' plop
'S1234567|123';'OLT';'456.0000';'RIT';'0'
'S9876543|456';'34235.0000';'RIT';'9876.0000'
'S2468642|789';'7654.0000';'RIT';'43215.0000'

$

0
k34450 Messages postés 6 Date d'inscription dimanche 20 octobre 2013 Statut Membre Dernière intervention 21 octobre 2013
21 oct. 2013 à 10:53
Hello zipe31

Je suis entrain de tester la commande

sed -n '1h;:z;$ba;n;/^\x27S/ba;H;bz;:a;x;s/\n/;/g;p;d' plop

Le système affiche le message suivant: "Label too long"

De ce fait rien ne se produit, est ce que tu sais pourquoi
Merci
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 422
21 oct. 2013 à 11:09
Quel système ? Quelle version de sed ?

Essaie de mettre les commandes sed dans un fichier :
$ cat script.sed 
#n
1 h
:z
$ b a
n
/^\x27S/ b a
H
b z
:a
x
s/\n\|$/;/g
p
d

Et de l'appeler comme suit :
$ sed -f script.sed plop 
'S1234567|123';'OLT';'456.0000';'RIT';'0';
'S9876543|456';'34235.0000';'RIT';'9876.0000';
'S2468642|789';'7654.0000';'RIT';'43215.0000';
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
k34450 Messages postés 6 Date d'inscription dimanche 20 octobre 2013 Statut Membre Dernière intervention 21 octobre 2013
21 oct. 2013 à 11:50
Le système est SunOS
Version sed je ne sais pas
Ok Je vais tester de mettre tout ça dans un file
0
dubcek Messages postés 18764 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 9 février 2025 5 624
21 oct. 2013 à 12:24
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 422
21 oct. 2013 à 12:26
Je doute que sur SunOS, même dans un fichier, que la solution sed fonctionne.
Mieux vaut privilégier la solution de dubcek avec nawk.
0
k34450 Messages postés 6 Date d'inscription dimanche 20 octobre 2013 Statut Membre Dernière intervention 21 octobre 2013
21 oct. 2013 à 12:54
Hello zipe31, dubeck
Alors avec script.sed ça fonctionne sauf que tout est sur une seule ligne
Effectivement il faudrait faire un retour à la ligne pour avoir en début de chaque lignes les données comme suit

'S1234567|123';'OLT';'456.0000';'RIT';'0'; ici retour à ligne
'S9876543|456';'34235.0000';'RIT';'9876.0000';ici retour à la ligne
'S2468642|789';'7654.0000';'RIT';'43215.0000'; ici retour à la ligne

Merci
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 422
21 oct. 2013 à 13:16
Chez moi avec Gnu/sed le retour est fait. Pour toi c'est la faute à ta version installée sur ton système SunOS.

Privilégies la solution de dubcek avec nawk.
0