[resolu]script bash, problème de jointure

script bash, problème de jointure [resolu] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 29-01-2006 à 21:23:05    

bonjour amis HFRiens et HFRiennes,  
 
Comme le dit le sujet, j'ai un problème de jointure. Parce que de longs discours ne valent pas mieux que du code, voila le script :

Code :
  1. #!/bin/bash
  2. sort -t: -n -k4 /etc/passwd -o tripasswd
  3. cut -d : -f1,3 /etc/group | sort -t: -n -k2 -o trigroup
  4. join -t: -1 4 -2 2 -a 1 -e "--ERR GROUP--" tripasswd trigroup > jointureA


 
Le but de la jointure est d'affichier pour toutes mes lignes du fichier /etc/passwd le nom du groupe associé.
Pour cela je trie d'abord le fichier /etc/passwd sur le champ 4 qui correspond au GID
Ensuite je coupe le champ 3 (parce que souvent vide) du fichier /etc/group et le trie sur le champ 2 qui correspond au GID
Maintenant la jointure et les soucis, elle se passe pour le premier fichier sur le champ 4 et pour le second sur le champ 2 et je veux affichier --ERR GROUP-- si un champ vide est détecté. Hors la jointure se passe mal ! Toutes les lignes ne sont pas affichées.
J'ai été obligé d'ajouter l'option -a 1 pour affichier les lignes non appariées (qui ne peuvent être mises ensembles, mais pourquoi???). Voici une partie de mon fichier jointureA :
 

Code :
  1. 0:halt:x:7:halt:/sbin:/sbin/halt:root
  2. 0:operator:x:11:operator:/var:/bin/sh:root
  3. 0:root:x:0:root:/root:/bin/bash:root
  4. 0:shutdown:x:6:shutdown:/sbin:/sbin/shutdown:root
  5. 0:suisa:x:0:isabelle:/home/root/suisa:/bin/bash:root
  6. 0:sumarc:x:0:marc:/root:/bin/bash:root
  7. 0:suoli:x:0:olivier:/home/root/suoli:/bin/bash:root
  8. 0:suseb:x:0:seb:/home/root/suseb:/bin/bash:root
  9. 0:sync:x:5:sync:/sbin:/bin/sync:root
  10. 1:bin:x:1:bin:/bin:/bin/sh:bin
  11. 2:daemon:x:2:daemon:/sbin:/bin/sh:daemon
  12. 4:adm:x:3:adm:/var/adm:/bin/sh:adm
  13. 7:lp:x:4:lp:/var/spool/lpd:/bin/sh:lp
  14. 12:mail:x:8:mail:/var/spool/mail:/bin/sh:--ERR GROUP--
  15. 13:news:x:9:news:/var/spool/news:/bin/sh:--ERR GROUP--
  16. 14:uucp:x:10:uucp:/var/spool/uucp:/bin/sh:--ERR GROUP--
  17. 69:vcsa:x:69:virtual console memory owner:/dev:/sbin/nologin:--ERR GROUP--
  18. 70:xfs:x:70:system user for XFree86:/etc/X11/fs:/bin/false:--ERR GROUP--
  19. 71:apache:x:71:system user for apache2:/var/www:/bin/sh:--ERR GROUP--


 
Cela marche correctement pour les 7 premiers groupes alors que le tri du fichier /etc/passwd est comme ceci (je ne mets pas toutes les lignes volontairement car trop long) :

Code :
  1. root:0
  2. bin:1
  3. daemon:2
  4. sys:3
  5. adm:4
  6. tty:5
  7. disk:6
  8. lp:7
  9. mem:8
  10. kmem:9
  11. wheel:10
  12. mail:12
  13. news:13
  14. uucp:14
  15. man:15
  16. floppy:19
  17. games:20
  18. cdrom:22
  19. utmp:24
  20. usb:43
  21. vcsa:69
  22. xfs:70
  23. apache:71


 
et le tri du fichier /etc/passwd comme ca :

Code :
  1. halt:x:7:0:halt:/sbin:/sbin/halt
  2. operator:x:11:0:operator:/var:/bin/sh
  3. root:x:0:0:root:/root:/bin/bash
  4. shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
  5. suisa:x:0:0:isabelle:/home/root/suisa:/bin/bash
  6. sumarc:x:0:0:marc:/root:/bin/bash
  7. suoli:x:0:0:olivier:/home/root/suoli:/bin/bash
  8. suseb:x:0:0:seb:/home/root/suseb:/bin/bash
  9. sync:x:5:0:sync:/sbin:/bin/sync
  10. bin:x:1:1:bin:/bin:/bin/sh
  11. daemon:x:2:2:daemon:/sbin:/bin/sh
  12. adm:x:3:4:adm:/var/adm:/bin/sh
  13. lp:x:4:7:lp:/var/spool/lpd:/bin/sh
  14. mail:x:8:12:mail:/var/spool/mail:/bin/sh
  15. news:x:9:13:news:/var/spool/news:/bin/sh
  16. uucp:x:10:14:uucp:/var/spool/uucp:/bin/sh
  17. vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
  18. xfs:x:70:70:system user for XFree86:/etc/X11/fs:/bin/false
  19. apache:x:71:71:system user for apache2:/var/www:/bin/sh


 
Si quelqu'un voit pourquoi cela ne marche pas pour toutes les lignes, je suis preneur. j'ai déjà testé -a2 cela fait pratiquement la mêmes chose, je sèche
 
merci^^


Message édité par dem0ntibul le 31-01-2006 à 20:13:08
Reply

Marsh Posté le 29-01-2006 à 21:23:05   

Reply

Marsh Posté le 31-01-2006 à 20:12:17    

résolu, en fait il ne faut pas trier numériquement.

Reply

Sujets relatifs:

Leave a Replay

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