command system qui ne marche pas avec awk - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 07-04-2009 à 14:35:44
Car en fait c'est comme si je faisait "echo [10.1.2.3]".
Mais je n'arrive pas à intégrer dans la commande "system" les guillements :
echo "[10.1.2.3]"
Si quelqu'un peut m'aider...
Marsh Posté le 07-04-2009 à 14:36:48
tu veux faire quoi au final ?
Marsh Posté le 07-04-2009 à 14:39:10
En fait ce que je voulais faire est un "sed" au lieu du "echo" :
Je souhaite concrètement faire un "sed" à l'interieur d'un "awk" en prenant en compte les adresses IP.
Il faut que j'utilise "sed" dans "awk" même s'il y a d'autre manière de faire car je cherche la substitution la plus rapide.
Et pour ça j'essaie de résoudre cet exercice
Marsh Posté le 07-04-2009 à 14:49:49
non, ce que je te demande, c'est ce que tu souhaites obtenir au final par rapport à ton fichier en entrée
Marsh Posté le 07-04-2009 à 15:05:53
Ce que je souhaite avoir c'est :
toto
-> toto
titi
-> titi
[10.1.2.3]
-> [10.1.2.3]
Marsh Posté le 09-04-2009 à 13:44:39
Le problème ce n'est pas la fonction system(). Ton problème c'est que l'expression "[10.1.2.3]" as un sens particulier pour le shell, et que tu as dans ton répertoire courant un fichier qui s'appelle "2".
Awk fait exécuter au shell la commande "echo [10.1.2.3]". Le shell commence faire faire un "pathname expansion" sur l'argument "[10.1.2.3]", qui signifie "Les fichiers nommés 1, ou 0, ou ., ou 2, ou 3. Si tu as un ou plusieurs fichiers qui vérifie ce critère, leur nom remplace l'expression. Dans ton cas tu as un fichier nommé "2", donc le "[10.1.2.3]" est remplacé par "2". Donc le shell exécute "echo 2".
Une solution simple est de mettre des quotes autour de l'expression, pour empêher le pathname expansion :
system("echo \"" $2 "\"" ) |
Marsh Posté le 07-04-2009 à 14:30:00
Bonjour à toutes et à tous !
J'essaye la commande suivante mais ça ne marche pas :
gawk '{
system("echo " $2);
print " -> "$2;
}' F1
F1 contient :
1 toto
2 titi
3 [10.1.2.3]
Le résultat est le suivant :
toto
-> toto
titi
-> titi
2
-> [10.1.2.3]
Je ne sais pas pourquoi il n'arrive pas à prendre en compte "[<adresse IP>]".
Vous aurez une idée ...?
Merci