Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1021 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  différence gawk mawk??

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

différence gawk mawk??

n°1439083
damcmoi
Posté le 08-09-2006 à 14:08:55  profilanswer
 

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
mood
Publicité
Posté le 08-09-2006 à 14:08:55  profilanswer
 

n°1439096
aigles
Posté le 08-09-2006 à 14:26:05  profilanswer
 

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.
n°1439100
damcmoi
Posté le 08-09-2006 à 14:29:07  profilanswer
 

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
n°1439145
aigles
Posté le 08-09-2006 à 15:27:26  profilanswer
 

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.
n°1439177
damcmoi
Posté le 08-09-2006 à 15:49:41  profilanswer
 

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

n°1439221
aigles
Posté le 08-09-2006 à 16:47:08  profilanswer
 

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.
n°1439290
Sve@r
Posté le 08-09-2006 à 18:52:58  profilanswer
 

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.
n°1440348
damcmoi
Posté le 11-09-2006 à 14:46:30  profilanswer
 

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...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  différence gawk mawk??

 

Sujets relatifs
différence entre 2 chaines de caractères[GAWK] insérer 2 colonnes dans un tableau à un endroit précis
Difference affichage IE/firefox[pascal] difference entre une procedure et une fonction ??
Difference entre le html et le xhtml...Différence d'affichage de date entre ASP et PHP via SQLServer
Différence entre 2 chaînes de caractèresDifférence entre <a href="javascript:toto()"> et <a onClick="..."> ??
Nvu ne fait pas la différence entre " et ' ??Difference entre | et || en C++
Plus de sujets relatifs à : différence gawk mawk??


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR