Contrôle d'existence via une table dans un shell
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:
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:
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 ?