Bonjour,
Comment contrôler l'existence d'un enregistrement par l'intermédiaire d'une table, le plus "proprement" possible ?
C'est une question générale sur la bonne façon de procéder.

Prenons un cas pour exemple :
Nous avons :
1/ un fichier (maître) dont chaque ligne est identifiée par un champ identifiant placé en première position (champ numéro 1)
2/ une table contenant tous les identifiants autorisés; cette table est en pratique un fichier dont la première colonne est la liste des identifiants valides

Que voulons nous faire ?
=> Contrôler la validité de chaque ligne du fichier maître à l'aide de la table; et ne garder que les lignes du fichier maître dont l'identifiant est présent dans la table.

Je pensais à la commande shell join pour faire cela.
Voici un petit jeu de test :
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
24
25
26
#!/bin/bash                   
#
echo "cat fichier.csv"
cat fichier.csv
echo
 
echo "cat table.csv"
cat table.csv
echo
 
echo "-----------------------------------------------------------------"
echo 'join -11 -21 -t";" -a1 -o 1.1 1.2 fichier.csv table.csv > zf3.csv'
      join -11 -21 -t";" -a1 -o 1.1 1.2 fichier.csv table.csv > zf3.csv
echo
 
echo "cat zf3.csv"
cat zf3.csv
echo
 
echo "-----------------------------------------------------------------"
echo 'join -11 -21 -t";" -a2 -o 1.1 1.2 fichier.csv table.csv > zf3.csv'
      join -11 -21 -t";" -a2 -o 1.1 1.2 fichier.csv table.csv > zf3.csv
echo
 
echo "cat zf3.csv"
cat zf3.csv
Ce qui donne à l'exécution :
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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
$ ./ztst_p1.sh 
cat fichier.csv
a1;present_fichier_ok
a3;present_fichier_ok
a4;present_fichier_KOKO
a5;present_fichier_ok
a7;present_fichier_ok
 
cat table.csv
a1;present_table_ok
a2;passé___table_KOKO
a3;present_table_ok
a5;present_table_ok
a6;futur___table_KOKO
a7;present_table_ok
a8;futur___table_KOKO
 
-----------------------------------------------------------------
join -11 -21 -t";" -a1 -o 1.1 1.2 fichier.csv table.csv > zf3.csv
 
cat zf3.csv
a1;present_fichier_ok
a3;present_fichier_ok
a4;present_fichier_KOKO
a5;present_fichier_ok
a7;present_fichier_ok
 
-----------------------------------------------------------------
join -11 -21 -t";" -a2 -o 1.1 1.2 fichier.csv table.csv > zf3.csv
 
cat zf3.csv
a1;present_fichier_ok
;
a3;present_fichier_ok
a5;present_fichier_ok
;
a7;present_fichier_ok
;
La commande shell join avec l'option -a2 marcherait bien s'il n'y avait pas 4 lignes vides (

Comment feriez-vous ?