Utiliser les resultat de commande `cat titi` dans awk

Utiliser les resultat de commande `cat titi` dans awk - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 12-03-2005 à 03:35:23    

voilou j'ai un fichier list de la forme  
 

Citation :


Alex       B         abt     boatt   polesi  /home
Eric      L        lfd     lle      polesi  /home/eci


 
 
j'aimerais savoir si les utilisateurs presents dans ce fichiers sont des utilisateurs systèmes. S'ils sont absents du /etc/passwd, je l'ai ajoute.
 
 
j'ai fais un fichier list.awk pour lister les utilisateurs : awk -f list.awk list

Code :
  1. {
  2.     print $1
  3. }


 
 
mais comment puis je faire le test si le user est deja present dans /etc/passwd ?
Je peux faire par exemple

Code :
  1. {
  2.     if ( `cat /etc/passwd | cut -d ":" -f 1 | grep -c $1` = 1)
  3.     {
  4.         print $1 est deja present;
  5.     }
  6.     else
  7.     { 
  8.         adduser $1
  9.     }
  10. }


mais je trouve ca un peu cochon.
 
 
 Y aurait pas moyen de faire un peu plus propre comme par exemple mettre dans la copndition :

Code :
  1. awk -F":" '{ if ($1=="Alex" ) print $1}' /etc/passwd


Alex une chaine chaine mais comment le remplacer par la variable du list.awk
 
 
Comment fait on pour utiliser pour les variables dans un autre awk ?
 
Quel est la solution la plus elegante ?


Message édité par weed le 12-03-2005 à 14:20:15
Reply

Marsh Posté le 12-03-2005 à 03:35:23   

Reply

Marsh Posté le 12-03-2005 à 09:48:08    

tu es obligé d'utiliser awk ? A la limite ca peut se faire avec une boucle for toute bête
 
à tester :

Code :
  1. PID=$$;
  2. cat /etc/passwd | cut -d":" -f1 > /tmp/passwd_$PID
  3. for i in `cat fichier_liste.txt | awk '{ print $1 }'`
  4. do
  5.     grep $i /tmp/passwd_$PID || adduser $i
  6. done
  7. rm /tmp/passwd_$PID


par contre ca passe par un fichier temporaire :/ je suis sûr qu'il y a un moyen de faire plus simple

Reply

Marsh Posté le 12-03-2005 à 14:13:48    

yep je preferais quand utiliser awk car j'aimerais utiliser les autres champs au fur et a mesure pour d'autre test

Reply

Marsh Posté le 12-03-2005 à 14:16:04    

ce qui est bizzare je peux meme pas utiliser de commande avec les ` ` dans un awk
 

Code :
  1. {
  2.         test=`cat /etc/passwd | cut -d ":" -f 1 | grep -c $1`;
  3.         if ( $test == 1 )
  4.         { print present;
  5.         }
  6. }


 
 
j'obtiens le message d'erreur suivant :

Citation :

awk: 2: unexpected character '`'


 
 
c'est bien dommage car cela limite drolement l'utilisation de awk. Je pense que je me suis trompé car c'est pas possible qu'il y ait autant de restriction ...


Message édité par weed le 12-03-2005 à 14:16:27
Reply

Sujets relatifs:

Leave a Replay

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