différence gawk mawk?? - Shell/Batch - Programmation
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 |
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
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 |
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 |
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 |
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
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à.
Marsh Posté le 08-09-2006 à 18:52:58
damcmoi a écrit : j'y parvient avec gawk sous debian sans problème, |
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 !!!
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 ), le support des millions d'utilisateurs et des docs et des paquets chouettes comme mplayer sont dispos...
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 édité par damcmoi le 08-09-2006 à 14:24:25