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)