Outils pour utilisateurs

Outils du site


cours:informatique:fun_mooc:maitrise_du_bash_univ-reunion:320_filtres_simples

Commandes de filtrage

Les filtres permettent de traiter des fichiers texte ou des chaînes de caractères. Ce sont des commandes simples acceptant sur l'entrée standard un flux texte et produisant sur la sortie standard une sous sélection du flux d'entrée. Il est ainsi possible d'extraire l'information pertinente de la masse de donnée texte via des combinaisons de commandes filtrantes.

Un filtre est donc un moyen, comme son nom l’indique, de simplifier, séparer, épurer ou clarifier un flux de données. Un flux de données est souvent un texte ou une chaîne de caractères. Les commandes qui lisent et écrivent sur les E/S sont appelées des filtres. Les filtres sont souvent utilisés en branchement de commande via du caractère '|'.

Découpage d'un fichier

Pour extraire seulement le début d'un fichier on utilise la commande head:

# extraire les 15 premières lignes
$ head -n 15 /path/to/file

Pour extraire les dernière lignes d'un fichier, utiliser la commande tail:

# extraire les 20 dernières lignes
$ tail -n 20 /path/to/file

La commande split permet de découper un fichier en plusieurs morceaux. Les fichiers créés seront nommés à l'aide du préfixe passé en paramètre et d'un suffixe dont le type de valeur peut être modifiée (alphabétique ou numérique). La taille de chaque fichier généré peut être précisée en octets ou en nombre de lignes.

# découpe file en fichiers de 30 lignes max avec suffixe
# numérique (option -d) et le prefixe test_  
$ split -l 30 -d /path/to/file test_

Trier les enregistrements

La commande sort permet d'effectuer des tris sur des valeurs alphabétiques ou numériques.

# par défaut le tri est alphabétique sur la première colonne
# séparateur espace
$ sort /path/to/file.txt
 
# Effectuer un tri numérique sur la deuxième colonne
$ sort -n -k 2 /path/to/file.txt
 
# On peut effectuer plusieurs tri successifs
# Ici un tri de valeurs numérique sur le champ 3
# puis un tri alphabétique sur le champ 4
$ cat /path/to/file.txt | sort -nk3 -k 4  

Extraction de données

La commande cut permet de sélectionner des colonnes dans un fichier.

# Sélection par caractère du 1ier au 6ieme
$ cat /path/to/file.txt | cut -c1-6
 
# Sélectionner les champs 1 et 3 délimités par ':'
cat /path/to/file.txt | cut -d ":" -f1,3
 
# La sélection peut comprendre un ensemble
# complexe, ici les champs 1 à 3, le champ 5
# et les champs 8 à 10
cat /path/to/file.txt | cut -d ":" -f1-3,5,8-10

Assemblage

La commande cat assemble les fichiers les uns à la suite des autres.

$ cat file1 file2 filen

La commande paste permet de juxtaposer séquentiellement les lignes de chaque fichier.

# contenu du fichier file1
$ cat file1
1
2
3
 
# contenu du fichier file2
$ cat file2 
A
B
C
 
# Juxtapose les lignes de chaque fichier séquentiellement
# utilise le caractère ':' comme spérateur (tab par défaut)
$paste -d ":" file1 file2
1:A
2:B
3:C

La commande join est similaire mais permet de faire une jointure plus élaborée en précisant les champs en correspondance dans chaque fichier.

  • Le champ clé doit être trié;
  • La sortie produite préfixe les enregistrements par le champ clé.
# contenu du fichier users.txt
# dans ce fichier la clé est le 3ieme champ
$ cat users.txt 
Mariel:1978:Liege
Yoann:1982:Pertuis
Catherine:1984:Pertuis
 
 
# contenu du fichier cities.txt
# dans ce fichier la clé est le premier champ
$ cat cities.txt
Liege:4020:Belgique
Pertuis:84120:France
 
# joindre les deux fichier en utilisant pour
# clé la colonne nom de ville
$ join -1 3 -2 1 users.txt cities.txt 
Liege Mariel 1978 4020 Belgique
Pertuis Catherine 1984 84120 France
Pertuis Yoann 1982 84120 France

Altération du contenu

La commande uniq retire les lignes adjacentes en doublon (trier le fichier avant d'utiliser cette commande).

# retire les doublons
cat /path/to/file | uniq
 
# Préfixer chaque ligne avec le nombre d’occurrences
cat /path/to/file.txt | uniq -c
 
# Retourne seulement les lignes ayant des doublons
cat /path/to/file.txt | uniq -d
 
# Retourne seulement les lignes uniques
cat /path/to/file.txt | uniq -u
 
# Ignorer les premiers champs(-f) ou caractères (-s) en début de ligne
# avant de procéder à la suppression de doublons
# NB: Un champ est délimité par une suite de caractères blancs
cat /path/to/file.txt | uniq -f 2

La commande tr1) remplace une liste de caractères par une autre.

# Contenu du fichier NOM.txt
$ cat NOM.txt 
BROOKS:Belle:33
JACK:Alice:10
DANIEL:Beatrice:1
 
# Il est possible de désigner des types de caractères par
$ cat NOM.txt | tr [:upper:] [:lower:]
brooks:belle:33
jack:alice:10
daniel:beatrice:1

Méta-information

La commande wc2) fournit des méta-informations sur un fichier ou sur l’entrée standard.Elle affiche le nombre de lignes, mots ou octets contenus dans le flux entrée.

# sans argument affiche le nombre de lignes, de mots et de caractères
cat file.txt | wc
 
# afficher le nombre de lignes -l
cat file.txt | wc --lines
 
# afficher le nombre de mots -w
cat file.txt | wc --words
 
# octest -c
cat file.txt | wc --bytes
 
# caractères -m
cat file.txt | wc --chars

Quiz

À quoi sert un filtre?

  • À modifier ou traiter un flux de données.

Quelle est la bonne écriture pour l'utilisation du filtre wc (Word Count)?

cat fichier.txt | wc

Indiquez la commande à utiliser pour chaque action :

  1. Filtrage appliqué sur des colonnes.
    • cut
  2. Filtrage sur le début du fichier.
    • head
  3. Filtrage des lignes en doublon.
    • uniq
  4. Comptage et méta-données.
    • wc

Quelle est la commande pour spécifier un découpage en colonne selon le délimiteur caractère deux points (':') et conserver la colonne 2?

cut -f 2 -d ":"
1)
translate
2)
word count
cours/informatique/fun_mooc/maitrise_du_bash_univ-reunion/320_filtres_simples.txt · Dernière modification : 2021/03/31 20:56 de 93.28.24.141