script de recherche - Linux et OS Alternatifs
Marsh Posté le 11-05-2005 à 09:27:47
en awk un script dans ce style:
Code :
|
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
Marsh Posté le 11-05-2005 à 10:14:21
oui ça marche si l'utilisateur existe mais s'il n'existe pas il ne me crée pas l'utilisateur
Marsh Posté le 11-05-2005 à 10:17:11
bon on va aranger ça
Code :
|
Marsh Posté le 11-05-2005 à 10:22:42
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
Marsh Posté le 11-05-2005 à 10:24:39
si c'est bon , une erreur dans mon script , merci ça marche
Marsh Posté le 11-05-2005 à 10:24:48
j'ai fais quelques corrections ew_user -> new_user et j'ai retiré les étoiles
Marsh Posté le 11-05-2005 à 10:30:22
BEGIN est exécuté avant tout traitement sur les chaines, END à la fin. Voir la doc gawk pour plus d'infos.
Marsh Posté le 11-05-2005 à 10:30:39
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
Marsh Posté le 11-05-2005 à 10:34:09
il manque juste le % avant le s dans le printf et c'est bon
un vrai langage de programmation à lui tout seul ce awk
Marsh Posté le 11-05-2005 à 10:35:23
oui j'ai tapé un peu trop vite
Marsh Posté le 11-05-2005 à 10:41:23
awk, ça traite des millions de lignes en quelques secondes. C'est réellement impressionnant, on devrait tous apprendre à s'en servir.
Marsh Posté le 11-05-2005 à 10:54:10
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é
j'ai fait :
awk -f 'set_quota.awk' -v user_a_modifier='user1' -v valeur_quota='1000' quotas.txt > quotas.txt
Marsh Posté le 11-05-2005 à 10:56:38
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
Marsh Posté le 11-05-2005 à 10:59:13
Et tu peux même remplacer le dernier ; par un &
Marsh Posté le 11-05-2005 à 10:59:54
pour que ça soit encore mieux un && comme ça si le script plante, il n'écrasera pas le fichier original
Marsh Posté le 11-05-2005 à 11:01:01
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/
Marsh Posté le 11-05-2005 à 14:06:45
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
Marsh Posté le 11-05-2005 à 14:16:11
# pas très compliqué surtout
Code :
|
Marsh Posté le 11-05-2005 à 14:26:28
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
Marsh Posté le 11-05-2005 à 14:31:41
quota=cat <ton fichier> | fgrep <user> | awk '{print $2 }'
Il faut plutôt faire:
quota=`cat <ton fichier> | fgrep <user> | awk '{print $2 }'`
Marsh Posté le 11-05-2005 à 14:32:38
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
Marsh Posté le 11-05-2005 à 14:33:37
Citation : quota=`cat <ton fichier> | fgrep <user> | awk '{print $2 }'` |
oubli des guillemets
Marsh Posté le 11-05-2005 à 14:40:17
c'est bien ce qui me semblait le fgrep ne fait pas une recherche exacte
pour user 1000
user2 2000
tempuser 3000
j'obtiens 1000
2000
3000
il prend tous les noms qui contiennent user
Marsh Posté le 11-05-2005 à 14:43:36
en awk:
Code :
|
appel :
awk -f 'find_quota.awk' -v user_a_analyser='user1' quotas.txt
Marsh Posté le 11-05-2005 à 09:16:51
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
ex:
user1 15000
user2 12000
set_quota user3 8000
-> user1 15000
user2 12000
user3 8000
set_quota user1 9000
-> user1 9000
user2 12000
user3 8000
comment faire ?