commande awk

Forum traitant de la distribution sécurisée montante nommée IP cop et basée sur la distribution Smoothwall. C'est à l'heure actuelle le forum le plus actif du site.

Modérateur: modos Ixus

commande awk

Messagepar testeur290306 » 13 Avr 2006 08:44

bonjour,

j'ai un script qui affiche un fichier passé en paramètre
avec la syntaxe suivante

cat $fichier | while read ligne
do
rem=echo $ligne |awk -F "," '{print$10}'

mais quand je veux envoyer le résultat dans un fichier, rien ne s'affiche
en faisant echo $rem >> fichiertest
le fichier se créer bien, mais rien à l'intérieur

quand je fais un echo $rem ça fonctionne, j'ai bien le champ que je veux récupérer

ceci est le premier problème
le second c'est le même mais la commande agit sur le résultat de la première
domaine=echo $rem |awk -F "*" '{print$6}'

il n'arrive pas à trouver le 6ème champ de la ligne séparé par *
la remarque est du type **DDNS**www.monsite.com
il faudrait qu'il récupère www.monsite.com
j'ai essayer plusieurs syntaxe sans résultat, changer les droits sur le fichier(fichiertest) dans lequel j'envoi le résultat mais toujours le problème

si vous avez une idée, un lien
merci
testeur290306
Premier-Maître
Premier-Maître
 
Messages: 57
Inscrit le: 29 Mars 2006 11:09

Messagepar jdh » 13 Avr 2006 09:40

Concernant bash, la meilleure doc AMHA se trouve à http://www.tldp.org/guides.html (parce tldp est un site de référence).

Il faut d'abord noter la différence entre les 2 syntaxes suivantes :

Code: Tout sélectionner
1er script :
cat $fichier | while read line
do
  x=$line
done
echo "valeur x=$x"

2me script :
while read line
do
  x=$line
done <$fichier
echo "valeur x=$x"


Quel script attribue une valeur à $x ?

Il est clair que c'est le 2me script puisque le premier créé 2 processus (à cause du pipe |) ce qui n'est pas le cas du 2me puisqu'il y a seulement une simple redirection. C'est une différence subtile mais énervante parce que peu évidente.

Il est plus efficace de faire quelque chose comme :

Code: Tout sélectionner
1er script :
read line
par1=`echo $line | awk -F "," {print $1}`
par2=`echo $line | awk -F "," {print $2}`

2me script:
IFS=","
read par1 par2


Le 2me script est quand même plus clair non ?



Sinon je ne comprends rien à tes questions depuis hier ou avant-hier. Ce serait mieux que tu ecrives ce que tu veux plus en détail parce que, petits bouts par petits bouts, personne ne peut comprendre.
Avatar de l’utilisateur
jdh
Amiral
Amiral
 
Messages: 4741
Inscrit le: 29 Déc 2002 01:00
Localisation: Nantes

Messagepar testeur290306 » 13 Avr 2006 10:22

bonjour,
merci pour tes explications

le problème c'était que je n'arrivais pas à récupérer le résultat de ma commande
rem= echo $ligne |awk -F "," '{print$10}'

et à l'envoyer dans un fichier

j'ai résolu le problème

il fallait mettre rem=`echo $ligne |awk -F "," '{print$10}'` pour qu'il puisse me renvoyer quelquechose
simplement les `

le script à l'air de fonctionner même avec le caractère * au lieu de , dans le awk -F ""

je réecris le script dyndns qui permet de mettre à jour une ip,en faisant un nslookup sur un nom de domaine qui est récupérer dans un fichier de config
regarde ce script http://www.fr.ixus.net/modules.php?name=Content&pa=showpage&pid=107

le nouveau problème c'est celui-ci
le script fait bien le nslookup car il me renvoi un ip mais avant il affiche ça

Use of uninitialized value in gethostbyname at /home/httpd/cgi-bin/nslookup.cgi line 19.
Use of uninitialized value in concatenation (.) or string at /home/httpd/cgi-bin/nslookup.cgi line 19.
bad host : at /home/httpd/cgi-bin/nslookup.cgi line 19.

si tu as une idée
merci
testeur290306
Premier-Maître
Premier-Maître
 
Messages: 57
Inscrit le: 29 Mars 2006 11:09

Messagepar jdh » 13 Avr 2006 10:42

Plusieurs réflexions :

- ce script ne me parait pas très utile : un vpn est bien plus intelligent et efficace.
- ce script est prévu pour la version 1.3 : il parait assez normal qu'avec une version différente il puisse y avoir des pbs de références.
- faire tourner dans un cron un pgm perl toute les minutes ? y a pas mieux à faire ?
- qu'est ce que c'est que ce "nslookup.cgi" ? La commande "host" n'existe pas ?
Avatar de l’utilisateur
jdh
Amiral
Amiral
 
Messages: 4741
Inscrit le: 29 Déc 2002 01:00
Localisation: Nantes

Messagepar testeur290306 » 13 Avr 2006 11:34

le nslookup.cgi c'est un script en perl qui est appelé par le script sh
ça fonctionne pour le moment mais j'ai ces lignes qui s'affichent quand je le lance
c'est pas bloquant pour le script mais c'est pas normal que je récupère ces erreurs
je sais que la version est différente donc j'essai de m'adapter mais pour utiliser les adresses ip dynamiques publiques je vois pas d'autres solutions
le script est intéressant pour ça

l'erreur vient sûrement d'une variable du gethostbyname dans ke script en perl

si tu as des pistes de recherche hésite pas
testeur290306
Premier-Maître
Premier-Maître
 
Messages: 57
Inscrit le: 29 Mars 2006 11:09


Retour vers IPCop

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit et 1 invité

cron