Manipulation de fichiers

Bonjour à tous,
Je vous explique un peu mon souci. Je dois envoyer par mail les identifiants de connexion à des parents pour ceux qui ont fourni un mail et par courrier pour les autres.
J’ai actuellement deux fichiers .csv car l’EN n’est pas tout à fait capable d’unifier ses bases de données.
L’un contient les identifiants, mot de passe, adresse, nom, prénom et UID.
L’autre contient les mails (ou vide), nom prénom et UID.
J’essaye d’unifier les deux avec la commande
join -a 1 -t $',' -11 -21 -o 1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.11,1.12,2.2 export_parents.csv Exp_responsables.csv > resultats.csv
La première colonne de chaque fichier correspond à l’UID qui est unique contrairement aux noms. Les chiffres correspondent bien aux colonnes que je veux garder dans chaque fichier mais je n’ai que le premier mail qui apparaît car la commande s’interrompt à la première ligne qui n’est pas commune aux deux fichiers. Comment outrepasser ce problème?

Deuxième problème. Je voudrais séparer en deux fichiers différents les parents qui ont un mail pour le publipostage et ceux qui n’en ont pas pour imprimer les lettres et les envoyer. J’essaye avec un petit script bash :

 #!/bin/bash

while read UID Civilite Nom Prenom E F G H I J K L M N O P Q Email
do
 case $Email in
 ${#1} ) echo $UID $Email >>parents_connectes.csv ;;
 *) 
 esac
done <Exp_responsables.csv

Ca me renvoie l’erreur suivante : ligne 3: UID : variable en lecture seule
Un problème dans le fichier j’imagine mais je sèche.

Merci d’avance.

UID est un nom de variable réservé dans bash.

Erreur classique qui te bouffe une journée !
Les messages d’erreurs sont parfois déroutants, trop dur a écrire “nom de variable réservée” ??
J’ai eu le même problème avec Angular-cli, pour info n’essayez pas de faire une application “test” :slight_smile:

1 J'aime

Merci pour vos réponses effectivement l’erreur est bête et j’aurais dû m’en rappeler. :sweat:

Bon j’ai régler mon premier problème de tri avec sort puis avec join.
Il me faut maintenant trier ceux qui ont un compte déjà activé et les autres. Je reviens avec mon script bash :

 #!/bin/bash

while read Civilite Nom Prenom Adres1 CP Ville Email N Password Username Mail
do
case $N in
N ) echo $Civilite $Nom $Prenom $Adres1 $CP $Ville $Email $Password $Username $Mail >> parents_non_connectes.csv ;;
O)
esac
done <resultats.csv

Dans le fichier resultat.csv se trouvent donc les colonnes civilite nom,etc. et la colonne N contient soit N si ils ne sont pas activés soit O. Sauf que le fichier parents_non_connectes.csv ne se crée pas. Je ne sais pas trop quoi en penser.
Merci d’avance pour vos réponses.

Bonjour,
en fait je me prends la tête pour rien. Au lieu de N et O j’ai collé NnNNN et O et j’ai utilisé la commande grep à partir de cet item. Pourquoi faire compliqué quand on peut faire simple?