- 1.
wc
: comptage des lignes, des mots ou des caractères d’un fichier - 2.
head
: affichage es premières lignes d’un fichier - 3.
tail
: affichage des dernières lignes d’un fichier - 4.
cut
: affichage des fragments spécifiés de chaque ligne d’un fichier - 5.
sort
: mise en ordre, éventuellement concaténation de lignes de fichier(s)- 5.1. Sans option (options par défaut vis à vis du tri)
- 5.2. Séparateur de champs dans les lignes
- 5.3. Spécification de champ(s) prioritaire(s) à retenir pour le tri
- 5.4. Tri selon des valeurs numériques
- 5.5. Quelques autres options
- 5.6. Vérification de l’état trié, ou non, d’un fichier
- 5.7. Concaténation avec tri de fichiers préalablement triés
- 6.
tr
: modification de séquences de caractères- 6.1. Remplacement d’un motif par un autre
- 6.2. Utilsation d’intervalles tels que
a-z
ouA-Z
ou0-9
- 6.3. Utilisation de classes (voir le man pour les différentes classes possibles)
- 6.4. Suppression de répétition (pas de 'motif_2' dans ce cas)
- 6.5. Suppression de séquences de caractères (pas de 'motif_2' dans ce cas)
- 6.6. Remplacer chaque caractère de
motif_1
par la répétition d’un caractère - 6.7. Négation
D’après l’édition 11 des travaux d’Alain Leaper, 2018-04-10
Licence GPL
Pour toutes ces commandes, affichage signifie sortie sur le canal de sortie standard, par défaut l’écran. Cette sortie peut être redirigée dans un fichier ou par un tube (pipe).
1. wc
: comptage des lignes, des mots ou des caractères d’un fichier
$ wc -l monFichier
12 monFichier (1)
$ wc -w monFichier
94 monFichier (2)
$ wc -c monFichier
600 monFichier (3)
$ wc -m monFichier
586 monFichier (4)
$ wc monFichier
29 94 600 monFichier (5)
1 | Affiche le nombre de lignes de monFichier |
2 | Affiche le nombre de mots de monFichier |
3 | Affiche le nombre d’octets. Ce nombre inclu EOF (le caractère de fin de fichier) |
4 | Affiche le nombre de caractères. Un caractère (notamment les caractères accentués du français en codage UTF-8) peut comporter plusieurs octets. |
5 | Affiche respectivement les nombres de : lignes, mots et octets |
2. head
: affichage es premières lignes d’un fichier
$ head monFichier (1)
$ head -15 monFichier (2)
$ head --l=-2 monFichier (3)
1 | Sans option, affiche les 10 premières lignes du fichier. |
2 | Avec option -<nb> , ici -15 , affiche les <nb> premières lignes. |
3 | Avec option --lines=-<nb> (pouvant être abrégé par -l , ici -2, la commande affiche toutes les lignes sauf les <nb> dernières. Notez le signe - devant le <nb> . |
3. tail
: affichage des dernières lignes d’un fichier
$ tail monFichier (1)
$ tail -3 monFichier (2)
$ tail --l=+4 monFichier (3)
1 | Sans option, affiche les 10 dernières lignes du fichier. |
2 | Avec option -<nb> , ici -3 , affiche les <nb> dernières lignes. |
3 | Avec option --lines=+<nb> , ici +4 , affiche toutes les lignes à partir de la <nb> e (incluse). Notez le signe + devant le <nb> . |
Exemple d’application :
Mettre dans un fichier (fic_12_13
) les lignes 12 et 13 d’un fichier donné (monFichier).
$ tail --l=+12 monFichier | head -2 > fic_12_13
4. cut
: affichage des fragments spécifiés de chaque ligne d’un fichier
La sélection s’applique à toutes les lignes du fichier, quelles soit organisées en colonne ou non.
4.1. Sélection par la position des caractères.
Une seule sélection :
Option -c
: -cN-P
sélection du caractère de rang N (inclus) jusqu’au caractère de rang P (inclus)
Exemple, ici avec redirection dans autreFichier
:
$ cut -c5-12 monFichier > autreFichier
autreFichier
contient alors dans chaque ligne les caractères de rangs 5 à 12 de monFichier
.
Forme -cN-
: sélection du caractère de rang N (inclus) jusqu’à la fin de la ligne.
Forme -c-N
: est équivalente à -c1-N
(du début de la ligne jusqu’au caractère de rang N).
La virgule permet de cumuler les sélections :
Forme -cN-P
, -cQ-R
…
Exemple :
$ cut -c5-7,9- (1)
1 | Sélection des caractères de rangs 5 à 7 et de rang 9 jusqu’à la fin de ligne. |
4.2. Sélection de champs limités par des séparateurs
Le séparateur par défaut est la tabulation. Plusieurs séparateurs consécutifs sont comptés comme autant de champs.
L’option -f
indique une sélection par champs : -fN-P
sélection du champ de rang N (inclus) jusqu’au champ de rang P (inclus).
Exemple, ici avec redirection dans autreFichier
:
$ cut -f2-4 monFichier > autreFichier (1)
1 | autreFichier contient dans chaque ligne les champs de rangs 2 à 4 de monFichier |
Forme -fN-
: sélection du champ de rang N (inclus) jusqu’à la fin de la ligne.
Forme -f-N
: est équivalente à -f1-N
(du début de la ligne jusqu’au champ de rang N).
4.3. Cas de lignes ne comprenant pas de séparateur de champ
Par défaut ces lignes sont sélectionnées intégralement.
Option -s
: elle permet d’éliminer les lignes ne comprenant pas de séparateur de champ.
Exemple:
$ cut -f2-4 -s monFichier > autreFichier (1)
1 | autreFichier ne contient plus (si elles existent) les lignes sans séparateur. |
4.4. Choix d’un autre séparateur que celui par défaut (la tabulation)
Option -d<caractère>
: caractère
sera le séparateur de champ.
Exemple: sélection des 2 premiers champs, avec comme séparateur le caractère espace (' ').
$ cut -f-2 -d' '
Un seul séparateur à la fois est valide, dans cet exemple la tabulation n’est plus un séparateur. |
Autre exemple: les champs sont séparés par le caractère ':'. Les lignes ne comprenant pas ce séparateur sont éliminées.
$ cut -f3- -d':' -s monFichier > autreFichier (1)
1 | autreFichier contient dans chaque ligne les champs de rangs 3 jusqu’à la fin de ligne
de monFichier. |
5. sort
: mise en ordre, éventuellement concaténation de lignes de fichier(s)
Le tri s’effectue selon les fragments spécifiés dans chaque ligne.
5.1. Sans option (options par défaut vis à vis du tri)
L’ordre des lignes est déterminé par le caractère de rang 1 (le plus à gauche). Si 2 (ou plus) lignes possèdent le même caractère, le caractère suivant est pris en considération (rang 2) pour le tri etc …
On distingue (pour les fichiers codés unicode UTF-8) :
-
les caractères alphanumériques, par ordre de priorité
0
à9
,a
àz
,A
àZ
. -
les autres caractères : — les caractères non alphanumériques tels que #, :, ], etc. — les lettres accentuées pour lesquels, bien qu’un classement déterministe existe, le plus simple est d’essayer.
$ sort monFichier
sort monFichier > autreFichier est équivalent à sort -o autreFichier monFichier
mais il possible de spécifier le même fichier sort -o monFichier monFichier (passage par un fichier temporaire).
|
5.2. Séparateur de champs dans les lignes
Par défaut le séparateur de champs est le caractère espace.
L’option -t <caractère>
permet de définir un autre séparateur champs.
$ sort -t : (1)
1 | Défini : comme séparateur. |
5.3. Spécification de champ(s) prioritaire(s) à retenir pour le tri
L’option -k
permet de spécifier le rang des champs prioritaires à prendre en compte pour le tri.
-k N,P
: les champs de rang N jusqu’au rang P (inclus), en priorité, déterminent le tri
-k N
(P
omis) : du rang N jusqu’à la fin de ligne
En cas d’égalité des champs prioritaires, la distinction s’opère en reprenant l’analyse de la ligne à partir du caractère le plus à gauche, puis, le suivant…
Il est possible de spécifier un intervalle de caractères, à l’intérieur d’un même champ.
-k N.p,Nq
: à l’intérieur du champ de rang N, seuls les caractères de rangs p à q participent
au tri.
Avec le Exemple: dans le cinquième champ, les caractères de rangs 2, 3 ,4 participent, en priorité, au tri.
|
5.4. Tri selon des valeurs numériques
Les chiffres 0 à 9 ne sont plus considérés en tant que caractères, mais comme représentation d’une valeur.
En général, cela n’a de sens que pour un champ, ou un fragment de champ. Terminer la spécification de champ par la lettre n. Valable aussi pour un champ contenant une valeur sous forme décimale (avec un point, par de virgule).
$ sort -t - -k3.4,3.6n monFichier (1)
1 | Utilisation du séparateur '-', tri selon les caractères de rangs 4 à 6 du troisième champ. |
5.5. Quelques autres options
-r
: inverser l’ordre du tri (première ligne devient la dernière).
-i
: les caractères minuscules et majuscules sont indistincts.
-d
: ignore les caractères autres les chiffres, les lettres et l’espaces.
-u
: élimine les doublons (ne garde qu’une seule ligne si plusieurs sont identiques).
5.6. Vérification de l’état trié, ou non, d’un fichier
L’option -c
permet cette vérification. Évidemment, si les conditions de tri préalables ne sont
pas celles par défaut, il est indispensable de les repréciser lors de la vérification.
Exemple, génération d’un fichier trié, puis contrôle:
$ sort -o fic_tri -t - -k3.4,3.6n monFichier (1)
$ sort -c -t - -k3.4,3.6n fic_tri (2)
Un fichier non trié (avec ces critères) provoque un message d’erreur (et valeur de retour égale 1).
La sortie en cas de succès (valeur de retour égale 0) peut être exploitée de la manière "habituelle" avec bash.
$ sort -c -t - -k3.4,3.6n fic_tri && echo "ce fichier est trié"
5.7. Concaténation avec tri de fichiers préalablement triés
L’option -m
n’a de sens qu’avec des critères de tri identiques pour les tris préalables et
pour le tri final.
$ sort -m <critères de tri> fichierTri_1 fichierTri_2 fichierTri_3 (1)
1 | fichierTri_1 , fichierTri_2 , fichierTri_3 doivent être déjà triés avec les mêmes critères… |
6. tr
: modification de séquences de caractères
Le canal d’entrée standard par défaut étant le clavier, il est en général redirigé à partir d’un fichier ou utilise la sortie d’un tube (pipe |
).
Il existe, en général, plusieurs outils alternatifs à tr
. La suite se contente de donner quelques exemples d’utilisation.
$ tr 'motif_1' 'motif_2' < monFichier >autreFichier
$ cat monFichier | tr 'motif_1' 'motif_2' >autreFichier
Il n’y a pas de fichier temporaire (contrairement à sort ), <monFichier >monFichier vide celui-ci (taille nulle) !
|
6.1. Remplacement d’un motif par un autre
$ tr 'de' 'WZ' < monFichier (1)
1 | Tous les 'd' sont remplacés par des 'W' puis les 'e' par des 'Z' |
Il est important de bien comprendre ce mécanisme dans le cas où 'motif_1' et 'motif_2' sont d’inégales longueurs.
$ tr 'dea' 'WZ' < monFichier (1)
1 | Le dernier caractère à remplacer (ici 'a') sera remplacé par le dernier caractère disponible (ici 'Z'). |
6.2. Utilsation d’intervalles tels que a-z
ou A-Z
ou 0-9
$ tr '0-9' ':' < monFichier (1)
1 | Tous les chiffres remplacés par ':' |
6.3. Utilisation de classes (voir le man pour les différentes classes possibles)
$ tr [:lower:] [:upper:] < monFichier (1)
1 | Toutes les lettres minuscules remplacées par des majuscules. |
6.4. Suppression de répétition (pas de 'motif_2' dans ce cas)
$ tr -s '#,' < monFichier (1)
1 | Dans une séquence de plusieurs '#' ou ',' consécutifs, une seule occurrence est conservée. |
6.5. Suppression de séquences de caractères (pas de 'motif_2' dans ce cas)
$ tr -d 'c-e#' < monFichier (1)
1 | Supprime toutes les minuscules de l’intervalle de c à e (donc : c,d,e) ainsi que # |
6.6. Remplacer chaque caractère de motif_1
par la répétition d’un caractère
Toute séquence de caractères constituants [motif_1]
est remplacée par une séquence de
même longueur du caractère C défini par [C*]
de motif_2.
$ tr '[lmutv]' '[$*]' < monFichier (1)
1 | ulm remplacé par $` ; `mutvl` ; par `$` ; `t` par `$` ; `mv` par ` ; etc. |
6.7. Négation
Tous les caractères sauf ceux constituants motif_1
sont remplacés par le caractère de motif_2
$ tr -c 'a-zA-Z0-9 \n' ':' (1)
1 | Tout ce qui n’est pas : line feed ; espace ; lettres (minuscules ou majuscules) ; chiffres est remplacé par le caractère : |