Modifier les données d'un fichier

Lancer un processus en tâche de fond Edition avec critères

Les filtres UNIX

Coupe un fichier en morceau : split

Trier un fichier : sort

Conversion de chaîne de caractères: tr

Coupe un fichier en morceau : split

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.

Trier des fichiers : sort

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

Conversion de chaîne de caractère :tr

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

Retour haut de la page