Pourquoi awk ne prends pas en compte mon fichier texte ?

Pourquoi lorsque je lance mon script j’ai le droit à

$ ./test2
awk: cannot open bin (No such file or directory)
./test2: line 12: security: command not found

[cpp]user=cat /etc/passwd | cut -d ":" -f 1;

awk -v var=$user ‘{
for (i in $user)
do
if ($i=$3)
{
print $1;
}
done;
}’
security[/cpp]

security est mon fichier texte. Je fais une conparaison entre le 3ème champs (les login) avec ceux present dans /etc/passwd

Je sais que je pourrais faire autrement en n’utilisant pas awk mais j’aimerais l’utiliser car j’en aurais besoin pour utiliser exploitement les autres champs si l’utilisateurs n’est pas present …

Bref pourquoi la commande ne veut pas prendre en compte le fichier security qui se trouve dans le meme repertoire que mon script

réesayes un petit peu en remplaçant ta ligne 12 par
./security
ou alors met le chemin complêt

et tiens moi au courant :wink:

Arf je n’ai pas la meme erreur. Je l’avais lancé sur une ubuntu. Voici mon erreur sous mandrake :
[cpp]# ./list
awk: cmd. ligne:2: Fatal: ne peut ouvrir le fichier « daemon » en lecture (No such file or directory)
./list: line 12: security: command not found[/cpp]

lorsque je mets ./security, cela me fais
[cpp]# ./list
awk: cmd. ligne:2: Fatal: ne peut ouvrir le fichier « daemon » en lecture (No such file or directory)
./security: line 1: Jerome: command not found
./security: line 2: Eric: command not found
[/cpp]
Jerome et Eric sont les 1er champs de mon fichier security

Lorsque je mets le chemin complet : /home/nec1/awk/security, j’ai le meme message que precedement.

Bon je viens de me rendre compte que c’est la transimission de variable avec -v val=valeur qui merdé.

Mais je n’arrive toujours pas à transmettre des variables dans awk

[cpp]
user=cat /etc/passwd | cut -d ":" -f 1;
awk -v val=“user” ‘{
for (i in val)
{
print $i
}
}’ /home/nec1/awk/security[/cpp]

lorsque je le lance, je n’arrive pas a afficher les valeurs de val. Cela n’affiche rien alors que cela devrai me donner les utilisateurs de mon systeme.

La syntaxe d’un for dans un awk est :
for (i in liste)
{
}
il faut mettre des ( ) et des { } et il ne faut pas mettre de $ pour la variable liste, si j’ai bien compris : http://www.chez.com/brunogarcia/Unix/Docs/awk.html

Pour bien identifier d’ou vient le problème, tu devrais dans un premier temps séparer l’acqisition en provenance de ton fichier /etc/passwd du reste du traitement

Fais par exemple

cat /etc/passwd | cut -d “:” -f 1 > temp_user

cela va te creer un fichier appelé temp_user qui contiendra tous les utilisateurs du système

Et dans un deuxième temps, utilise AWK avec ce fichier temp_user

Cela devrai isoler ton problème

pour trouver les users cette syntaxe est plus performante :


awk -F":" '{ print $1 }' /etc/passwd

weed002 juste pour savoir tu as une mandrake et ubuntu sur 2 disques différents ? car j ai un prob cf post [???] lilo
merci

nop que je l’ai dis dans ton post, je n’ai pas ubuntu et mdk sur le poste. Je suis sur l’ordi de mes parents sur lequel j’ai installé une mdk