|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre à l'essai
![]() Inscription : mai 2004 Messages : 148 ![]() |
Bonjour tlm,
quelqu'un peut m'aider pour ecrire un script avec awk et sed ? Voila, j'ai un fichier que je veux modifier quelques lignes et le resultat sera diriger vers un nouveau fichier. En fait les lignes que je veux modifier commence toute avec la meme chaine de caractères, mais chaque lignes est diviser en plusieurs champs, et moi je veux modifier le 3ème champ de cette ligne Merci. |
|
|
00
|
|
|
#2 | |
|
Membre confirmé
![]() Inscription : octobre 2005 Messages : 344 ![]() |
Je ne l'ai pas testé, mais ça devrait marcher ....
Citation:
|
|
|
|
00
|
|
|
#3 |
|
Membre à l'essai
![]() Inscription : mai 2004 Messages : 148 ![]() |
Bonjour,
Merci pour la portion du script. Seulement ou dois je spécifier le nom de fichier à traiter, vu que j'en ai plusieurs dans le repertoire. Merci pour ta précieuse aide. |
|
|
00
|
|
|
#4 | ||
|
Membre confirmé
![]() Inscription : octobre 2005 Messages : 344 ![]() |
il y a deux façons de faire : soit :
Citation:
Citation:
|
||
|
|
00
|
|
|
#5 |
|
Membre à l'essai
![]() Inscription : mai 2004 Messages : 148 ![]() |
Bonjour,
Voila je résume : for file in `ls -1 *.txt` do while read ligne do champs1=`echo $ligne | awk '{print $1}'` # on teste si la ligne commence par le mot voulu if [ "$champs1" = "debut de la chaine" ] then champs3=`echo $ligne | awk '{print $3}'` # on remplace le troisieme mot par ce que l on veut ligne=`echo $ligne | sed s/"$champs3"/"**********"` fi echo $ligne >> image_fichier_test.txt done done Mais j'ai lancer le script et il ya rien . Merci |
|
|
00
|
|
|
#6 | |
|
Membre confirmé
![]() Inscription : octobre 2005 Messages : 344 ![]() |
tu as oublié dans le premier done:
Citation:
|
|
|
|
00
|
|
|
#7 |
|
Membre à l'essai
![]() Inscription : mai 2004 Messages : 148 ![]() |
Bonjour,
Je crois qu'il manque quelque chose dans la partie de substitution de sed, car j'ai le message suivant : mon_script.sh[11]: [debut de la chaine: not found. Merci. |
|
|
00
|
|
|
#8 | |
|
Membre confirmé
![]() Inscription : octobre 2005 Messages : 344 ![]() |
il manque le "/" à la fin :
Citation:
|
|
|
|
00
|
|
|
#9 |
|
Membre à l'essai
![]() Inscription : mai 2004 Messages : 148 ![]() |
Bonjour,
Ca marche tjs pas. De plus le fichier généré a perdu le formatage comme le fichier initial. Merci |
|
|
00
|
|
|
#10 | |
|
Membre Expert
![]() Frédéric Brugmans Informaticien multitâche Inscription : février 2005 Messages : 661 ![]() |
Ce ne serait pas plus simple comme ceci ? :
Citation:
|
|
|
|
00
|
|
|
#11 |
|
Membre à l'essai
![]() Inscription : mai 2004 Messages : 148 ![]() |
Bjr,
Peux tu m'expliquer cette instruction ? plz |
|
|
00
|
|
|
#12 |
|
Membre Expert
![]() Frédéric Brugmans Informaticien multitâche Inscription : février 2005 Messages : 661 ![]() |
awk -F"SEPARATEUR" '{ gsub("REGEXP","MODIFICATIONCHAINE",$3) ; print $0 }' > fichier
Pour un SEPARATEUR : SEPARATEUR Modifie le champ 3 $3 en remplacant l'expression reguliere REGEXP par la chaine MODIFICATIONCHAINE Une fois que c'est fait, tu affiches la ligne au complet |
|
|
00
|
|
|
#13 |
|
Membre à l'essai
![]() Inscription : mai 2004 Messages : 148 ![]() |
Dans ce cas, le SEPARATEUR serait $CHAMPS1, REGEXP serait $CHAMPS3, et MODIFICATIONCHAINE serait ma nouvelle chaine de caractères, n'est pas ?
Merci |
|
|
00
|
|
|
#14 | ||||
|
Membre Expert
![]() Frédéric Brugmans Informaticien multitâche Inscription : février 2005 Messages : 661 ![]() |
je vais prendre un exemple concret :
soit un fichier fichier.txt qui contient coucou|lala|truc|mucherg coucou|lala|truc|muchegr coucou|lala|truc|muchefvr coucou|lala|truc|muchef coucou|lala|truc|muchefje j'ameliore au passage mon fichier.awk Code :
OFS etant le séparateur de champ en sortie dans le champ 3 je remplace "uc" par "oulala" ( exemple stupide inside ) awk -f fichier.awk fichier.txt > nouveau_fichier.txt Resultat Code :
|
||||
|
|
00
|
|
|
#15 |
|
Membre à l'essai
![]() Inscription : mai 2004 Messages : 148 ![]() |
Re-bjr,
je crois que c'est mieux que ce que j'avais auparavant, seulement la chaine que je veux modifier n'est pas identique dans toute les lignes, elle varie. Ya t-il un moyen de contourner le fichier .awk ? Merci bcp pour ta précieuse aide. |
|
|
00
|
|
|
#16 |
|
Membre Expert
![]() Frédéric Brugmans Informaticien multitâche Inscription : février 2005 Messages : 661 ![]() |
Si tu donnais un exemple avec fichier d'entrée et de sortie avec quelques explications, ce serait bienvenu
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com