Bonjour,
J'ai un problème de tri sur un fichier, un tableur excell (que j'ouvre avec OpenOffice)
En effet, il se trouve dans ce fichier 2 colonnes contenant chacune un certain nombre de nom
Certaines nomss sont présents dans les 2 colonnes, d'autres sont uniquement présents dans l'une ou l'autre colonne.
Il me faut trier ces 2 colonnes.
Le premier résultat doit être les noms communs aux 2 colonnes.
Le second doit être les noms uniquement présents dans la 1ère colonne.
Le dernier doit être les noms uniquement présents dans la 2ème colonne.
Aussi, je sélectionne toute la colonne pour mettre tout au même format par défaut, puis met tout les noms en majuscule.
Puis, je copie la 1ère colonne du fichier excell et la colle dans 1 fichier KWrite (nommé H) Puis fait la même chose avec la 2ème colonne dans un 2ème fichier KWrite (nommé C). KWrite est un utilitaire genre notepad sous le bureau Linux KDE.
J'utilise alors la commande sort pour trier les noms par ordre alphabétique pour le fichier H, puis C
ex : sort -o H1 H
mv H1 H
Puis la commande uniq :
ex : uniq H > H1
mv H1 H
Puis utilise des scripts (que je ne comprends pas bien) pour faire les différents tris.
-Noms communs aux 2 colonnes :
script appelé fusion :
-----------------------------------
---------------------------
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 #! /bin/bash -x fic_serveur1="/home/kaleo/Bureau/TEST/H" fic_serveur2="/home/kaleo/Bureau/TEST/C" fictmp=/tmp/fichier commun1="/home/kaleo/Bureau/TEST/commun" #for m in `cat $fic_serveur1` # do # grep $m $fic_serveur2 >> $commun1 # done awk '{ printf("^%s$\n", $1) }' $fic_serveur1 > $fictmp { grep -f $fictmp $fic_serveur2 > $commun1 # noms communs aux 2 colonnes écritent dans le fichier commun } 2>commun.log rm $fictmp
- Noms uniquement présents dans la colonne H du fichier excell, c'est à dire dans le fichier H
script appelé machine_unique_H
-------------------------
---------------------------
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 #! /bin/bash -x fic_serveur1="/home/kaleo/Bureau/TEST/H" fic_serveur2="/home/kaleo/Bureau/TEST/C" fictmp=/tmp/fichier commun1="/home/kaleo/Bureau/TEST/unique_H" awk '{ printf("^%s$\n", $1) }' $fic_serveur2 > $fictmp { grep -v -f $fictmp $fic_serveur1 > $commun1 } 2>commun.log rm $fictmp
- Noms uniquement présents dans la colonne C du fichier excell, c'est à dire dans le fichier C
script appelé machine_unique_C
-------------------------
-----------------
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 #! /bin/bash -x fic_serveur1="/home/kaleo/Bureau/TEST/C" fic_serveur2="/home/kaleo/Bureau/TEST/H" fictmp=/tmp/fichier commun1="/home/kaleo/Bureau/TEST/unique_C" awk '{ printf("^%s$\n", $1) }' $fic_serveur2 > $fictmp # prend que la chaine (%s=string) #comprise entre début de ligne (^) et la fin de ligne # ($), le \n est égale à retour chariot, la chaine est entre "", le $1 = au 1er argument, printf #affiche la chaine entre () # les {} = l'ensemble des commandes awk comprises entre '' { grep -v -f $fictmp $fic_serveur1 > $commun1 } 2>commun.log rm $fictmp
Hélas la commande wc -l appliquée aux différents fichiers : H, C, commun, unique_C, unique_H ne renvoit pas un résultat cohérent.
ex : wc -l H
La somme de commun(185)+unique_H(80) est différente des 266 noms présents dans H.
266 H
285 C
80 unique_H
99 unique_C
185 commun
De même il manque 1 nom dans la somme commun+unique_C.
Après recherche manuelle je trouve un nom présent dans le fichier H et absent dans le fichier unique_H
De même je trouve un nom présent dans le fichier C (ZORRO) et absent dans le fichier unique_C
La commande diff qui compare le fichier C au fichier H :
diff C H > DIFFERENCE
montre à travers la lecture du fichier DIFFERENCE que le nom ZORRO n'apparait pas comme nom unique dans le fichier C
La réecriture du nom (ZORRO) sous VI dans le fichier C ne change hélas rien
Est ce une erreur de manipulation de ma part ?
Le script appelé fusion semble bon, par contre je doute des scripts :
machine_unique_C
machine_unique_H
Merci d'avance pour votre patience (et bonne année ;0)
Partager