command system qui ne marche pas avec awk

command system qui ne marche pas avec awk - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 07-04-2009 à 14:30:00    

Bonjour à toutes et à tous !  :hello:  
 
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

Reply

Marsh Posté le 07-04-2009 à 14:30:00   

Reply

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

Reply

Marsh Posté le 07-04-2009 à 14:36:48    

tu veux faire quoi au final ? [:petrus dei]


---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
Reply

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

Reply

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 [:petrus dei]


---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
Reply

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]

Reply

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 "\"" )


Message édité par matafan le 09-04-2009 à 13:46:37
Reply

Sujets relatifs:

Leave a Replay

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