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 '|'.
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_
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
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
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.
# 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
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
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
À quoi sert un filtre?
Quelle est la bonne écriture pour l'utilisation du filtre wc (Word Count)?
cat fichier.txt | wc
Indiquez la commande à utiliser pour chaque action :
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 ":"