Manipulation de texte

J’avais des manipulations de fichier texte à faire. J’avais un fichier liste qui ressemblait à

012345 - NOM, Prénom
012345 - DEUXIÈME NOM-AUTRENOM, Prénom-Composé

et un fichier usernames, qui ressemble à:

username:x:9999:99999:Prenom Nom:/blah/blah:blah/blah

(format passwd)

Le but : pour chaque ligne de liste, retrouver la personne dans passwd, et rajouter « username » à la fin de ladite ligne du fichier liste.

Étape 1: Virer les lignes vides de liste

sed -i '/^$/d' liste

Étape 2: Transformer liste pour virer le numéro en début de ligne, et mettre Prénom NOM à l’endroit.

awk '{print $3 " " $2}' FS=', | - ' liste

FS = Field Separator : on change de champ quand on rencontre « ,  » ou  » – « … et on les imprime dans l’autre sens.

Etape 3: Trouver un moyen d’analyser le fichier obtenu ligne par ligne.
Je n’ai pas réussi en utilisant la variable IFS de bash pour mettre chaque ligne dans un tableau, mais « read » est venu à mon secours.
Premier jet:

while read line;
do echo $line $(grep -i "$line" usernames | cut -d : -f 1);
done < liste

Problème : dans liste j’ai des accents, pas dans usernames.

Pour contourner ce problème:

tr "àçéèêëîïôöùüÂÇÉÈÊËÎÏÔÖÙÜ" "aceeeeiioouuACEEEEIIOOUU"

devrait enlever tous ces vilains accents.

Problème : mon système est en UTF8 et tr n’y comprend rien. Par exemple:

echo sàlut | tr à a

renvoie « saalut ». La raison est que « à » est codé sur deux octets, donc pour tr, on a tapé:

echo s12lut | tr 12 a

où 1 et 2 sont les deux octets de « à ».
et tr rallonge ‘a’ pour obtenir:

echo s12lut | tr 12 aa

d’où l’effet.

Pour contourner cela, j’utilise recode. Je dois donc appliquer « recode » aux lignes d’entrée ET à la ligne de remplacement. Bref, au final :

while read line;
do echo $line $(grep -i "$(echo $line | recode utf8..latin1 | tr $(echo "àçéèêëîïôöùüÂÇÉÈÊËÎÏÔÖÙÜ" | recode utf8..latin1) "aceeeeiioouuACEEEEIIOOUU")" usernames | cut -d : -f 1);
done < liste

(c’est très mal écrit, j’en suis conscient, mais Ça Marche© — si on veut m’écrire ça proprement, je prends !)

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s


%d blogueurs aiment cette page :