et si tu fais fgrep "user " (à moins qu'il y ait des espaces dans le nom ce qui n'est pas trop unix-friendly)
<mon fichier> doit être remplacé par le chemin complet du fichier
il me dit line1 :<mon fichier> : command not found
de plus , fgrep ne fait pas une recherche exact il me semble
si j'ai user 1000 et user2 2000
et que je fais un fgrep user
il va m'afficher 1000 et 2000
et pour faire une recherche dans ce même fichier alors ?
si je veux afficher le quota de user2 s'il existe
et afficher "quota introuvable" s'il l'utilisateur n'existe pas
YupYup
Je vais plus loin, et j'invente le &&& ! Aucune idée de ce que ça peut bien faire, mais c'est moi qui ai la plus grosse \o/
jlighty
:D pour que ça soit encore mieux un && comme ça si le script plante, il n'écrasera pas le fichier original
YupYup
Et tu peux même remplacer le dernier ; par un &
jlighty
il ne faut surtout pas que les noms soient identiques !
pourquoi ?
awk traite ton fichier ligne par ligne, à chaque ligne il retourne les modifications
tu n'as quà faire ça :
awk -f 'set_quota.awk' -v user_a_modifier='user1' -v valeur_quota='1000' quotas.txt > quotas_modifier.txt ; mv -f quotas_modifier.txt quotas.txt
slash51
c'est normal que si <le fichier contenant les quotas et users> et fichier_config_modifier est le même je me retrouve plus qu'avec une seule ligne dans le fichier modifié
awk, ça traite des millions de lignes en quelques secondes. C'est réellement impressionnant, on devrait tous apprendre à s'en servir.
jlighty
:ange: oui j'ai tapé un peu trop vite
slash51
il manque juste le % avant le s dans le printf et c'est bon
un vrai langage de programmation à lui tout seul ce awk
jlighty
BEGIN : exécute des instructions dès le lancement du script
END : exécute des instructions à la fin du script
toutes les infos dans man awk
YupYup
BEGIN est exécuté avant tout traitement sur les chaines, END à la fin. Voir la doc gawk pour plus d'infos.
slash51
BEGIN ... END , c'est interpreté comment par awk ?
jlighty
j'ai fais quelques corrections ew_user -> new_user et j'ai retiré les étoiles
slash51
si c'est bon , une erreur dans mon script , merci ça marche
slash51
c'est quoi les étoiles avant chaque instruction ? je l'ai enlevé sinon ça s'execute pas
mais il m'ajoute l'utilisateur en fin de fichier même si l'utilisateur existe deja
jlighty
bon on va aranger ça
Code :
BEGIN { new_user=1}
{
if ($1==user_a_modifier)
{
new_user=0;
printf "%s %i\n",$1,valeur_quota;
}
else
print $0;
}
END {if (new_user==1)
printf "%s %i\n",user_a_modifier,valeur_quota; }
slash51
oui ça marche si l'utilisateur existe mais s'il n'existe pas il ne me crée pas l'utilisateur
jlighty
en awk un script dans ce style:
Code :
{
if ($1==user_a_modifier)
{
printf "%s %i\n",$1,valeur_quota;
}
else
print $0;
}
on le sauvegarde dans un fichier set_quota.awk
comment l'appeler :
awk -f 'set_quota.awk' -v user_a_modifier='<le user>' -v valeur_quota='<le quota>' <le fichier contenant les quotas et users> > <le fichier contenant la modification>
ex:
awk -f 'set_quota.awk' -v user_a_modifier='user1' -v valeur_quota='1000' <le fichier contenant les quotas et users> > fichier_config_modifier
Edit : appel du script
slash51
salut , j'aimerais faire une recherche d'un utilisateur dans un fichier de config et lui définir un quota s'il n'existe pas ou lui changer son quota s'il existe