Comment remplacer ou renommer plusieurs mots d'un champ sous UNIX
9 réponses
Guytou
Bonjour à Tous,
J'ai un fichier nommé "rapport_rec.txt". J'aimerai avoir un script ou une
ligne de commande qui me permet
de renommer automatiquement le champ STATUT (champ numéro 5):
l'interret de -pi est d'eviter de passer par un fichier temporaire avec sauvegarde du fichier d'origine en .bak. pour ne pas faire de sauvegarde, remplacer -pi.bak par -pi tout court.
Regards, Cordialement,
Cyrille Lefevre. -- mailto:Cyrille.Lefevre-news% supprimer "%nospam% et ".invalid" pour me repondre. remove "%nospam" and ".invalid" to answer me.
J'aimerai avoir un script ou une ligne de commande pour renommer en une
seule fois:
SUCCESS en OK
INACTIVE en IN
FAILURE en KO
TERMINATED en TE
Je sais que l'on peut le faire avec sed pour remplacer ou renommer un seul
mot par exemple SUCCESS en OK.
sed "s/SUCCESS/OK/g" rapport_REC.txt
Comment faire pour remplacer ou renommer en une seule fois SUCCESS,
INACTIVE, FAILURE et TERMINATED?
l'interret de -pi est d'eviter de passer par un fichier temporaire
avec sauvegarde du fichier d'origine en .bak. pour ne pas faire de
sauvegarde, remplacer -pi.bak par -pi tout court.
Regards, Cordialement,
Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%nospam@laposte.net.invalid
supprimer "%nospam% et ".invalid" pour me repondre.
remove "%nospam" and ".invalid" to answer me.
l'interret de -pi est d'eviter de passer par un fichier temporaire avec sauvegarde du fichier d'origine en .bak. pour ne pas faire de sauvegarde, remplacer -pi.bak par -pi tout court.
Regards, Cordialement,
Cyrille Lefevre. -- mailto:Cyrille.Lefevre-news% supprimer "%nospam% et ".invalid" pour me repondre. remove "%nospam" and ".invalid" to answer me.
Benoit Izac
Bonjour,
le 11/05/2007 à 00:33, Cyrille Lefevre a écrit dans le message :
J'aimerai avoir un script ou une ligne de commande pour renommer en une seule fois:
SUCCESS en OK INACTIVE en IN FAILURE en KO TERMINATED en TE
l'interret de -pi est d'eviter de passer par un fichier temporaire avec sauvegarde du fichier d'origine en .bak. pour ne pas faire de sauvegarde, remplacer -pi.bak par -pi tout court.
Ce qui est aussi intéressant aussi avec Perl, c'est d'utiliser un hash pour stocker les remplacements : - c'est plus lisible et maintenable lorsque le nombre de remplacements est élevé ; - ça évite d'avoir à recopier 50 fois la même expression rationnelle surtout si elle est compliquée.
l'interret de -pi est d'eviter de passer par un fichier temporaire
avec sauvegarde du fichier d'origine en .bak. pour ne pas faire de
sauvegarde, remplacer -pi.bak par -pi tout court.
Ce qui est aussi intéressant aussi avec Perl, c'est d'utiliser un hash
pour stocker les remplacements :
- c'est plus lisible et maintenable lorsque le nombre de
remplacements est élevé ;
- ça évite d'avoir à recopier 50 fois la même expression
rationnelle surtout si elle est compliquée.
l'interret de -pi est d'eviter de passer par un fichier temporaire avec sauvegarde du fichier d'origine en .bak. pour ne pas faire de sauvegarde, remplacer -pi.bak par -pi tout court.
Ce qui est aussi intéressant aussi avec Perl, c'est d'utiliser un hash pour stocker les remplacements : - c'est plus lisible et maintenable lorsque le nombre de remplacements est élevé ; - ça évite d'avoir à recopier 50 fois la même expression rationnelle surtout si elle est compliquée.
while (<>) { chomp; foreach my $word (keys %abbr) { s/$words*$/$abbr{$word}/; } print "$_n"; }
__END__
-- Benoit Izac
bull.titan
bonjour,
l'idée de kevin était bonne,
si tu veux un "programme" qui te fasse ca en ligne de commande, tu peux essayer un truc du type :
#!/bin/bash
fichier=/chemin_vers_ton_fichier/rapport_rec.txt
cat ${fichier} | sed -e s/SUCCESS/OK/g | sed -e s/INACTIVE/IN/g | sed -e s/FAILURE/KO/g | sed -e s/TERMINATED/TE/g >${fichier}
et tu as juste a lancer le script pour que ca te fasse ta transfo automatiquement si le fichier est petit, ca ira, par contre si le fichier est gros, le traitement risque de prendre bc plus de temps que les beaux scripts en perl ^^
cdt,
bonjour,
l'idée de kevin était bonne,
si tu veux un "programme" qui te fasse ca en ligne de commande, tu
peux essayer un truc du type :
#!/bin/bash
fichier=/chemin_vers_ton_fichier/rapport_rec.txt
cat ${fichier} |
sed -e s/SUCCESS/OK/g |
sed -e s/INACTIVE/IN/g |
sed -e s/FAILURE/KO/g |
sed -e s/TERMINATED/TE/g >${fichier}
et tu as juste a lancer le script pour que ca te fasse ta transfo
automatiquement
si le fichier est petit, ca ira, par contre si le fichier est gros, le
traitement risque de prendre bc plus de temps que les beaux scripts en
perl ^^
si tu veux un "programme" qui te fasse ca en ligne de commande, tu peux essayer un truc du type :
#!/bin/bash
fichier=/chemin_vers_ton_fichier/rapport_rec.txt
cat ${fichier} | sed -e s/SUCCESS/OK/g | sed -e s/INACTIVE/IN/g | sed -e s/FAILURE/KO/g | sed -e s/TERMINATED/TE/g >${fichier}
et tu as juste a lancer le script pour que ca te fasse ta transfo automatiquement si le fichier est petit, ca ira, par contre si le fichier est gros, le traitement risque de prendre bc plus de temps que les beaux scripts en perl ^^
cdt,
bull.titan
tu dois pouvoir le faire en awk aussi pour gagner du temps
tu dois pouvoir le faire en awk aussi pour gagner du temps
tu dois pouvoir le faire en awk aussi pour gagner du temps
Benoit Izac
Bonjour,
le 13/05/2007 à 08:34, bull titan a écrit dans le message :
l'idée de kevin était bonne,
Personne n'a dit le contraire.
si tu veux un "programme" qui te fasse ca en ligne de commande, tu peux essayer un truc du type :
#!/bin/bash
Ça commence mal : $ /bin/bash sh: /bin/bash: No such file or directory
fichier=/chemin_vers_ton_fichier/rapport_rec.txt
cat ${fichier} | sed -e s/SUCCESS/OK/g | sed -e s/INACTIVE/IN/g | sed -e s/FAILURE/KO/g | sed -e s/TERMINATED/TE/g >${fichier}
Ne JAMAIS faire ça !
Le « cat » est inutile, tu appelles quatre processus « sed » alors qu'un seul suffirait et le plus grave, c'est que $fichier va se retrouver raccourci si sa taille est plus grande que le buffer utilisé.
et tu as juste a lancer le script pour que ca te fasse ta transfo automatiquement si le fichier est petit, ca ira, par contre si le fichier est gros, le traitement risque de prendre bc plus de temps que les beaux scripts en perl ^^
Je pense que tu voulais écrire l'inverse. Il est clair que les performances en Perl sont bien moins bonne que celle de sed mais personne ici n'a parlé de performance ou de fichier de grande taille.
-- Benoit Izac
Bonjour,
le 13/05/2007 à 08:34, bull titan a écrit dans le message
<1179038060.328026.69700@u30g2000hsc.googlegroups.com> :
l'idée de kevin était bonne,
Personne n'a dit le contraire.
si tu veux un "programme" qui te fasse ca en ligne de commande, tu
peux essayer un truc du type :
#!/bin/bash
Ça commence mal :
$ /bin/bash
sh: /bin/bash: No such file or directory
fichier=/chemin_vers_ton_fichier/rapport_rec.txt
cat ${fichier} |
sed -e s/SUCCESS/OK/g |
sed -e s/INACTIVE/IN/g |
sed -e s/FAILURE/KO/g |
sed -e s/TERMINATED/TE/g >${fichier}
Ne JAMAIS faire ça !
Le « cat » est inutile, tu appelles quatre processus « sed » alors qu'un
seul suffirait et le plus grave, c'est que $fichier va se retrouver
raccourci si sa taille est plus grande que le buffer utilisé.
et tu as juste a lancer le script pour que ca te fasse ta transfo
automatiquement
si le fichier est petit, ca ira, par contre si le fichier est gros, le
traitement risque de prendre bc plus de temps que les beaux scripts en
perl ^^
Je pense que tu voulais écrire l'inverse. Il est clair que les
performances en Perl sont bien moins bonne que celle de sed mais
personne ici n'a parlé de performance ou de fichier de grande taille.
le 13/05/2007 à 08:34, bull titan a écrit dans le message :
l'idée de kevin était bonne,
Personne n'a dit le contraire.
si tu veux un "programme" qui te fasse ca en ligne de commande, tu peux essayer un truc du type :
#!/bin/bash
Ça commence mal : $ /bin/bash sh: /bin/bash: No such file or directory
fichier=/chemin_vers_ton_fichier/rapport_rec.txt
cat ${fichier} | sed -e s/SUCCESS/OK/g | sed -e s/INACTIVE/IN/g | sed -e s/FAILURE/KO/g | sed -e s/TERMINATED/TE/g >${fichier}
Ne JAMAIS faire ça !
Le « cat » est inutile, tu appelles quatre processus « sed » alors qu'un seul suffirait et le plus grave, c'est que $fichier va se retrouver raccourci si sa taille est plus grande que le buffer utilisé.
et tu as juste a lancer le script pour que ca te fasse ta transfo automatiquement si le fichier est petit, ca ira, par contre si le fichier est gros, le traitement risque de prendre bc plus de temps que les beaux scripts en perl ^^
Je pense que tu voulais écrire l'inverse. Il est clair que les performances en Perl sont bien moins bonne que celle de sed mais personne ici n'a parlé de performance ou de fichier de grande taille.
-- Benoit Izac
bull.titan
On 13 mai, 10:13, Benoit Izac wrote:
Bonjour,
le 13/05/2007 à 08:34, bull titan a écrit dans le message :
l'idée de kevin était bonne,
Personne n'a dit le contraire.
si tu veux un "programme" qui te fasse ca en ligne de commande, tu peux essayer un truc du type :
#!/bin/bash
Ça commence mal : $ /bin/bash sh: /bin/bash: No such file or directory
fichier=/chemin_vers_ton_fichier/rapport_rec.txt
cat ${fichier} | sed -e s/SUCCESS/OK/g | sed -e s/INACTIVE/IN/g | sed -e s/FAILURE/KO/g | sed -e s/TERMINATED/TE/g >${fichier}
Ne JAMAIS faire ça !
Le « cat » est inutile, tu appelles quatre processus « sed » alor s qu'un seul suffirait et le plus grave, c'est que $fichier va se retrouver raccourci si sa taille est plus grande que le buffer utilisé.
et tu as juste a lancer le script pour que ca te fasse ta transfo automatiquement si le fichier est petit, ca ira, par contre si le fichier est gros, le traitement risque de prendre bc plus de temps que les beaux scripts en perl ^^
Je pense que tu voulais écrire l'inverse. Il est clair que les performances en Perl sont bien moins bonne que celle de sed mais personne ici n'a parlé de performance ou de fichier de grande taille.
-- Benoit Izac
je fais ca rapidement, maintenant c'est sur que tu peux te passer du cat et faire un sed directement du type "sed -e machin sed -e machin sed -e machin sed -e machine ${fichier} >${newfichier}
c'est ca que tu veux dire ?
On 13 mai, 10:13, Benoit Izac <use.reply...@INVALID.ADDRESS> wrote:
Bonjour,
le 13/05/2007 à 08:34, bull titan a écrit dans le message
<1179038060.328026.69...@u30g2000hsc.googlegroups.com> :
l'idée de kevin était bonne,
Personne n'a dit le contraire.
si tu veux un "programme" qui te fasse ca en ligne de commande, tu
peux essayer un truc du type :
#!/bin/bash
Ça commence mal :
$ /bin/bash
sh: /bin/bash: No such file or directory
fichier=/chemin_vers_ton_fichier/rapport_rec.txt
cat ${fichier} |
sed -e s/SUCCESS/OK/g |
sed -e s/INACTIVE/IN/g |
sed -e s/FAILURE/KO/g |
sed -e s/TERMINATED/TE/g >${fichier}
Ne JAMAIS faire ça !
Le « cat » est inutile, tu appelles quatre processus « sed » alor s qu'un
seul suffirait et le plus grave, c'est que $fichier va se retrouver
raccourci si sa taille est plus grande que le buffer utilisé.
et tu as juste a lancer le script pour que ca te fasse ta transfo
automatiquement
si le fichier est petit, ca ira, par contre si le fichier est gros, le
traitement risque de prendre bc plus de temps que les beaux scripts en
perl ^^
Je pense que tu voulais écrire l'inverse. Il est clair que les
performances en Perl sont bien moins bonne que celle de sed mais
personne ici n'a parlé de performance ou de fichier de grande taille.
--
Benoit Izac
je fais ca rapidement, maintenant c'est sur que tu peux te passer du
cat et faire un sed directement du type "sed -e machin sed -e machin
sed -e machin sed -e machine ${fichier} >${newfichier}
le 13/05/2007 à 08:34, bull titan a écrit dans le message :
l'idée de kevin était bonne,
Personne n'a dit le contraire.
si tu veux un "programme" qui te fasse ca en ligne de commande, tu peux essayer un truc du type :
#!/bin/bash
Ça commence mal : $ /bin/bash sh: /bin/bash: No such file or directory
fichier=/chemin_vers_ton_fichier/rapport_rec.txt
cat ${fichier} | sed -e s/SUCCESS/OK/g | sed -e s/INACTIVE/IN/g | sed -e s/FAILURE/KO/g | sed -e s/TERMINATED/TE/g >${fichier}
Ne JAMAIS faire ça !
Le « cat » est inutile, tu appelles quatre processus « sed » alor s qu'un seul suffirait et le plus grave, c'est que $fichier va se retrouver raccourci si sa taille est plus grande que le buffer utilisé.
et tu as juste a lancer le script pour que ca te fasse ta transfo automatiquement si le fichier est petit, ca ira, par contre si le fichier est gros, le traitement risque de prendre bc plus de temps que les beaux scripts en perl ^^
Je pense que tu voulais écrire l'inverse. Il est clair que les performances en Perl sont bien moins bonne que celle de sed mais personne ici n'a parlé de performance ou de fichier de grande taille.
-- Benoit Izac
je fais ca rapidement, maintenant c'est sur que tu peux te passer du cat et faire un sed directement du type "sed -e machin sed -e machin sed -e machin sed -e machine ${fichier} >${newfichier}
c'est ca que tu veux dire ?
Benoit Izac
Bonjour,
le 13/05/2007 à 15:10, bull a écrit dans le message :
je fais ca rapidement, maintenant c'est sur que tu peux te passer du cat et faire un sed directement du type "sed -e machin sed -e machin sed -e machin sed -e machine ${fichier} >${newfichier}
c'est ca que tu veux dire ?
Relis le message de Pascal.
-- Benoit Izac
Bonjour,
le 13/05/2007 à 15:10, bull a écrit dans le message
<1179061810.412828.236150@q75g2000hsh.googlegroups.com> :
je fais ca rapidement, maintenant c'est sur que tu peux te passer du
cat et faire un sed directement du type "sed -e machin sed -e machin
sed -e machin sed -e machine ${fichier} >${newfichier}
le 13/05/2007 à 15:10, bull a écrit dans le message :
je fais ca rapidement, maintenant c'est sur que tu peux te passer du cat et faire un sed directement du type "sed -e machin sed -e machin sed -e machin sed -e machine ${fichier} >${newfichier}