différence gawk mawk??

différence gawk mawk?? - Shell/Batch - Programmation

Marsh Posté le 08-09-2006 à 14:08:55    

salut,
 
je cherche à faire un script qui enlève le i de chaque ligne qui commence par i  dans un fichier.
 
j'y parvient avec gawk sous debian sans problème,
mais sous ubuntu, qui n'a pas gawk mais mawk, les lignes modifiées n'apparaissent plus à leur place dans le fichier, mais à la fin.
Quelqu'un peut me dire pourquoi ou s'il y a une autre manière de faire?
 
 
Mon script :

#!/bin/bash
 
cat fichier | awk ' {if ($1 == "i" ) {print $0 | "cut -c2-"}else{print $0}}


 
Merci les gars   :)

Message cité 1 fois
Message édité par damcmoi le 08-09-2006 à 14:24:25
Reply

Marsh Posté le 08-09-2006 à 14:08:55   

Reply

Marsh Posté le 08-09-2006 à 14:26:05    

Ton problème semble indiquer que gawk et mawk ne gérent pas de les pipes la même façon (à moins que ce ne soit debian et ubuntu ...).
 
Attention, ton test ($1 == "i" ) ne selectionne pas les lignes commençant par "i" mais les lignes dont le premier champ est "i" (et qui donc commencent par "i" suivi d'un espace, d'une tabulation ou d'une fin de ligne).
 
La solution la plus simple est à mon sens de faire :

awk '{ sub(/^i/, "" ) ; print $0}' fichier


 
Il est aussi possible d'effectuer la même chose avec sed:

sed 's/^i//' fichier



Message édité par aigles le 08-09-2006 à 14:30:28

---------------
Jean Pierre.
Reply

Marsh Posté le 08-09-2006 à 14:29:07    

oui oui merci
je ne l'avais pas précisé mais si ça commence par un i ya un espace après effectivement :)
 
ton code sous awk ne marche pas  :(, j'ai un message pour le sub. Mais bon pas grave
par contre celui en sed est ok
merci  :)  
 
Mais en fait mon pb est un peu plus complexe que ça
dans le fichier /etc/apt/sources.list de la ubuntu, il y a une ligne :
# deb http://blablabla.... dapper universe
 
et ce que je veux faire c'est :
si il y le mot "universe" sur ma ligne, je veux enlever le # de début de ligne....
c'est pour cela que je passe par gawk...
et mon script ss debian marche et celui sous ubuntu enlève bien le # mais repositionne ma ligne à la fin du fichier...
 
le truc idéal sera de faire un  

grep "universe" fichier | cut -c2-


 
sur chaque ligne du fichier et les lignes matchées seraient modifiées et celle non matchées inchangées.
 
Je sais pas si on peux utiliser un for ds un script shell...
 
C'est qd même vachement plus simple d'avoir un gawk qui marche  :D


Message édité par damcmoi le 08-09-2006 à 14:55:52
Reply

Marsh Posté le 08-09-2006 à 15:27:26    

Citation :

ton code sous awk ne marche pas  :(, j'ai un message pour le sub. Mais bon pas grave
par contre celui en sed est ok
merci  :)

Je ne vois pas trop ce qui peut ne pas plaire à gawk, essaye :

awk '{ sub(/^i/, "" ) ; print $0}' fichier


 

Citation :

Mais en fait mon pb est un peu plus complexe que ça
dans le fichier /etc/apt/sources.list de la ubuntu, il y a une ligne :
# deb http://blablabla.... dapper universe
 
et ce que je veux faire c'est :
si il y le mot "universe" sur ma ligne, je veux enlever le # de début de ligne....

Avec gawk tu peux faire :

awk '/universe/ { sub(/^#/, "", $0) } 1' fichier


Si le mot universe doit être le dernier de la liste :

awk '$NF == /universe/ { sub(/^#/, "", $0) } 1' fichier


 
Avec sed (non testé):

sed '/universe/s/^#//' fichier



---------------
Jean Pierre.
Reply

Marsh Posté le 08-09-2006 à 15:49:41    

il me mets l'erreur là dessus : eurreur de syntaxe près du jeton '/^i/;""' inattendu
 
fabuleux le dernier sed !, merci bcp Aigles, tu es très gentil d'avoir pris du temps pour moi :D

Reply

Marsh Posté le 08-09-2006 à 16:47:08    

damcmoi a écrit :

il me mets l'erreur là dessus : eurreur de syntaxe près du jeton '/^i/;""' inattendu


Attention, le séparateur dans la fonction sub est la virgule et non le point-virgule.
Si tu as bien retranscrit le message d'erreur, ton problème vient de là.


---------------
Jean Pierre.
Reply

Marsh Posté le 08-09-2006 à 18:52:58    

damcmoi a écrit :

j'y parvient avec gawk sous debian sans problème,
mais sous ubuntu, qui n'a pas gawk mais mawk...


Qu'est-ce que c'est que cette distrib qui n'implémente même pas les outils gnu ?
J'hésitais à l'installer mais là, je n'hésite plus !!!


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 11-09-2006 à 14:46:30    

non mais faut pas luidéclarer la guerre ! lol
elle est vraiment bien sinon cette distrib.
l'efficacité d'une debian (à gawk près :D), le support des millions d'utilisateurs et des docs et des paquets chouettes comme mplayer sont dispos...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed