Modifier les données d'un fichier |
![]() |
![]() |
Les filtres UNIX |
La commande split permet de couper un fichier en morceau (en plusieurs fichiers), en tapant :
split -10 mon-fichier fichier
Vous allez créer les fichiers fichieraa, fichierab, fichierac, ... qui contiendront tous 10 lignes. Le premier fichieraa contient les 10 premières lignes, ainsi de suite.
Soit le fichier carnet-adresse suivant :
maurice:29:0298334432:Crozon |
marcel:13:0466342233:Marseille |
robert:75:0144234452:Paris |
yvonne:92:0133444335:Palaiseau |
Le premier champ représente le nom, le deuxième le département, le troisième le numéro de téléphone et le dernier la ville. Attention le premier champ est noté 0, le deuxième 1, ainsi de suite.
En faisant sort sans argument :
sort carnet-adresse
Par défaut il va trier sur le premier caractère et ranger donc dans l'ordre alphabétique :
marcel:13:0466342233:Marseille |
maurice:29:0298334432:Crozon |
robert:75:0144234452:Paris |
yvonne:92:013344433:Palaiseau |
Si vous voulez trier sur le deuxième champ (le département), vous devez d'abord indiquer que le : est le caractère qui sépare deux champs (par défaut c'est l'espace), avec l'option -t :. Vous devez ensuite indiquer que vous trier un chiffre avec l'option -n (numérique). Pour indiquer qu'on veut trier le deuxième champ, il faut marquer qu'on veut trier à partir du second champ (+1) jusqu'au troisième (-2). Soit le résultat suivant ;
sort -n -t : +1 -2 carnet-adresse
On obtient :
marcel:13:0466342233:Marseille |
maurice:29:0298334432:Crozon |
robert:75:0144234452:Paris |
yvonne:92:013344433:Palaiseau |
Avec la commande :
sort -t : +3 -4 +0 carnet-adresse
Vous allez trier suivant le quatrième champ (numéro 3), c'est à dire la ville (tri par ordre alphabétique sur le premier caractère), en mettant +0, il va effectuer un deuxième tri pour les villes qui commencent par le même caractère, le deuxième tri porte sur le prénom (le premier caractère).
maurice:29:0298334432:Crozon |
marcel:13:0466342233:Marseille |
robert:75:0144234452:Paris |
yvonne:92:013344433:Palaiseau |
Les options de sort sont les suivantes :
option | effet | |
-b | ignore les espaces et les tabulations en début de champ | |
-d | tri sur les caractères alphanumériques (caractères, chiffres et espace) uniquement | |
-r | inverse l'ordre de tri | |
-f | pas de différence entre minuscule et majuscule | |
-tx | Le caractère x est considéré comme séparateur de champ | |
-u | supprime les lignes doublons | |
-n | trie sur des chiffres |
En tapant la commande suivante :
sort -t : +3.2 +0 carnet-adresse
Vous allez effectuer le tri sur le troisième caractère (numéro 2, le premier a pour numéro 0) du quatrième champ (numéro 3). En cas d'égalité du premier tri, on fait un dernier tri sur le premier caractère du prénom. Soit le résultat :
yvonne:92:013344433:Palaiseau |
maurice:29:0298334432:Crozon |
marcel:13:0466342233:Marseille |
robert:75:0144234452:Paris |
La commande tr permet de convertir une chaîne de caractère en une autre de taille égale. Les options sont les suivantes :
option | effet | |
-c | Les caractères qui ne sont pas dans la chaîne d'origine sont convertis selon les caractères de la chaîne de destination | |
-d | destruction des caractères appartenant à la chaîne d'origine | |
-s | si la chaîne de destination contient une suite contiguë de caractères identiques, cette suite est réduite à un caractère unique |
La commande tr a besoin qu'on lui redirige en entrée un fichier, le résultat de la conversion s'affichant sur la sortie standard.
Soit notre fichier carnet-adresse :
maurice:29:0298334432:Crozon |
marcel:13:0466342233:Marseille |
robert:75:0144234452:Paris |
yvonne:92:013344433:Palaiseau |
Pour remplacer le : par un #, nous taperons :
tr " : " " # " < carnet-adresse
Pour faire la même chose on peut aussi bien éditer le fichier avec cat et rediriger par pipe vers tr, en tapant :
cat carnet-adresse | tr " : " " # "
On peut utiliser des métacaractères. En tapant :
cat carnet-adresse | tr " [a-f] " " [A-F] "
Vous allez remplacer les caractères de a à f de minuscule en majuscule. Soit:
mAuriCE:29:0298334432:Crozon |
mArCEl:13:0466342233:MArsEillE |
robErt:75:0144234452:PAris |
yvonnE:92:013344433 :PAlAisEAu |