Exercices UNIX sur les commandes cut et past


Exercice 1

Afficher les trois informations suivantes (provenant de /etc/passwd) : nom de connexion de l'utilisateur, nom complet (champ libre) et shell attribué à l'utilisateur. Si /etc/passwd avait ce contenu :
root:Uhu)j9Pg[vz0J":0:0:Le manie tout:/:/bin/tcsh
daemon:*:1:1::/etc:
bin:*:2:2::/usr/bin:
sys:*:3:3::/usr/src:
adm:*:4:4: Administrateur du système:/usr/adm:/bin/sh
adam:QfTyu(lfmL$:100:100:Adam Poupon:/home/staff/adam:/bin/ksh
durand:gVFGjui01kj:102:100:Michel Durand:/home/staff/duarnd:/bin/ksh
Le résultat devrait être :
USER            WHO IS                          SHELL
root Le manie tout /bin/tcsh
daemon
bin BIN
sys SYS
adm Administrateur du système /bin/sh
adam Adam Poupon /bin/ksh
durand Michel Durand /bin/ksh



Exercice 2


Soit compte le fichier des comptes des clients. On suppose qu'il a la structure suivante : 5 chiffres pour le code banque, 5 chiffres pour le code guichet, 10 chiffres pour le numéro de compte, 1 lettre pour compléter le numéro de compte, 2 chiffres pour la clé RIB, 30 caractères pour la désignation du client. Produire en sortie les informations suivantes (séparées par la barre verticale) : Désignation du client, son numéro à 10 chiffres et la lettre complétant ce numéro. Soit gestion le fichier des gestionnaires des comptes. Il se compose de lignes ayants les champs (séparés par la barre verticale) suivants : Désignation du gestionnaire, lettre du numéro de compte des clients dont il est responsable. Produire en sortie un listing avec les informations suivantes : Désignation du gestionnaire, le client dont il est responsable, le numéro de son compte.

Exercice 3

Etant donné le fichier resultats :

 Nom             Résultats
 -------------------------
 Yann 104:33:48
 Tudor 8:19:0
 Patrick 15:98:48
 Carole 104:33:20
 Gérard 32:0:10
 René 5:13:10
 Lucienne 15:98:48

Utilisez la calculatrice en ligne (commande bc pour basic calculator) pour produire un fichier ayant le contenu de resultats plus une 3ème colonne qui est la somme des trois points de la colonne résultats.



Exercice 1 :
echo 'USER WHOIS SHELL'; cut -d : -f 1,5,7 /etc/passwd | tr : '\t'

Exercice 2 :
cut -c 24- compte > /tmp/clients
cut -c 6-20 compte > /tmp/nums
cut -c 21 compte > /tmp/lettres
La première commande crée le fichier /tmp/clients qui contient les désignations des clients, la deuxième commande crée les numéros de comptes et la troisième crée un fichier de lettres de comptes.

paste -d "||" /tmp/clients /tmp/nums /tmp/lettres
Cette commande réalise la mise bout-à-bout des lignes des 3 fichiers en séparant les contenus par des barres verticales. Ce qui donne :
Désignation | Numéro de compte | Lettre
paste -d "||" /tmp/clients /tmp/nums /tmp/lettres | join -t '|' -1 2 -2 3 -o 1.1,2.1,2.2 gestion -
Le résultat du paste est 'join' sur le même champ avec le fichier gestion. On ne fourni que les champs nécessaires (le premier champ du fichier gestion et les 2 premiers du résultat du pipe).


Exercice 3 :
Si on considère que fichier est le fichier résultat sans les lignes de tête :
cat fichier | tr -s '\t' | cut -f 2 | tr : + | bc | paste -d '\t' fichier -
tr -s '\ t' : remplace les tabulations succéssives par une seule (pour avoir la liste des nombres en 2 ème champ; sinon nous aurons une chaîne vide en deuxième champ s'il y avait plusieurs tabulations après le nom cut -f 2 : prend le second champ (Nbr1:Nbr2:Nbr3) tr : + : transforme Nbr1:Nbr2:Nbr3 en Nbr1+Nbr2+Nbr3 bc : évalue l'expression Nbr1+Nbr2+Nbr3 paste -d '\ t' fichier - : rajoute à fichier, en troisième colonne, le résultat de bc