logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).


L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT → ODT PDF Export

Ceci est une ancienne révision du document !


Table des matières

D'autres commandes pour la gestion des fichiers-texte

Nota : Voici des commandes très simples d'utilisation.

Contributeurs, les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli !

Introduction

Pour les commandes principales de gestion des fichiers :

Nous allons aborder quelques commandes complémentaires permettant de :

  • améliorer l'affichage : fmt ; nl
  • combiner le contenu de fichiers : join ; paste
  • transformer le contenu de fichiers : sort ; split ; tr ; uniq ; expand et unexpand

la commande fmt

Syntaxe

fmt [options] [fichier...]

Préparation

Création du fichier “~/Essai-text-processing/essai-fmt”

cat > ~/Essai-text-processing/essai-fmt <<EOF
> chez debian-facile c'est facile ... très facile ... très très facile ... très très très très très très facile ... 
facile et encore facile !
> EOF

Affichage du contenu d'un fichier en respectant les mots

  • Affichage avec la commande cat
cat ~/Essai-text-processing/essai-fmt
chez debian-facile c'est facile ... très facile ... très très facile ... très tr
ès très très très très facile ... facile et encore facile !
L'affichage avec la commande cat peut être difficile à lire.
  • Affichage avec la commande fmt :
fmt ~/Essai-text-processing/essai-fmt
chez debian-facile c'est facile ... très facile ... très très facile
... très très très très très très facile ... facile et encore
facile !
  • Par défaut, la commande fmt affiche le contenu d'un fichier par ligne de 75 caractères maximum.
  • L'option -w : pour indiquer le nombre de caractère par ligne
fmt -w 20 ~/Essai-text-processing/essai-fmt
chez debian-facile
c'est facile
... très facile
... très très
facile ... très
très très très
très très facile
... facile et
encore facile !

Combiner fmt et less pour encore plus de lisibilité

fmt -w 20 ~/Essai-text-processing/essai-fmt | less
chez debian-facile
c'est facile
... très facile
... très très
facile ... très
très très très
très très facile
... facile et
encore facile !
(END)

La commande nl

Permet de numéroter l'affichage d'un fichier.

Syntaxe

nl [options] [fichier...]

Préparation

  • copie du fichier ~/.bashrc et visualisation :
cat ~/.bashrc >> ~/Essai-text-processing/bashrc-bis
  • comparons avec l'affichage de less
less ~/Essai-text-processing/bashrc-bis
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac
Premières lignes du retour.

Affichage numéroté

nl ~/Essai-text-processing/bashrc-bis
</code user>

<code>
     1	# ~/.bashrc: executed by bash(1) for non-login shells.
     2	# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
     3	# for examples
       
     4	# If not running interactively, don't do anything
     5	case $- in
     6	    *i*) ;;
     7	      *) return;;
     8	esac
Premières lignes du retour

Pour encore plus de lisibilité

fmt -w 65 ~/Essai-text-processing/bashrc-bis | nl ~/Essai-text-processing/bashrc-bis | less
     1  # ~/.bashrc: executed by bash(1) for non-login shells.
     2  # see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
     3  # for examples
       
     4  # If not running interactively, don't do anything
     5  case $- in
     6      *i*) ;;
     7        *) return;;
     8  esac
Premières lignes du retour
Par défaut la commande nl numérote les lignes non-vides.
  • Quelques options :
    1. -b : numérotation des lignes vides
    2. -b -t[expression régulière] : affiche tout mais numérote les lignes qui correspondent à l'expression régulière
    3. -n ln : affichage avec numérotation tout à droit.
    4. -n rn : affichage par défaut, c'est-à-dire avec une tabulation à droite avec le chiffre de la numérotation.
    5. -n rz : affichage de zéro entre le bord droit et le chiffre de numérotation
  • voir man nl pour plus de meilleures explications.

La commande join

Syntaxe de la commande join

join [options]... fichier1 fichier2

Préparation

Soit deux fichiers : “users” et “infos-users”

cat ~/Essai-text-processing/users
01 Toto
02 Titi
03 Lili
cat ~/Essai-text-processing/infos-users
toto@gmail.com 01
titi@gmx.fr 02
lili@hotmail.com 03

Fusion de ces deux fichiers

join -1 1 -2 2 ~/Essai-text-processing/users ~/Essai-text-processing/infos-users
01 Toto toto@gmail.com
02 Titi titi@gmx.fr
03 Lili lili@hotmail.com
  • Explications :
    • l'option -1 : donne le n° de colonne du champ commun, pour le premier document
    • 1 : premier fichier
    • l'option -2 : n° de colonne du champ commun, pour le deuxième document
    • 2 : deuxième fichier
  • D'autres options utiles :
    • -j (option CHAMP) : équivalent à « -1 CHAMP -2 CHAMP »
    • -i : ignorer les différences de casse
  • voir man join pour plus d'options
Pour fusionner des fichiers qui ont en commun :
join -t':' -2 1 -2 2 fichier1 fichier2

Concaténation de la fusion dans un fichier

join -1 1 -2 2 ~/Essai-text-processing/users ~/Essai-text-processing/infos-users > ~/Essai-text-processing/adr-users

Vérification

cat ~/Essai-text-processing/adr-users
01 Toto toto@gmail.com
02 Titi titi@gmx.fr
03 Lili lili@hotmail.com

La commande paste

Syntaxe de la commande paste

paste [options]... [fichier]...

La jointure se fait selon lignes à ligne, donc il faut des fichiers avec des lignes rangées dans le même ordre.

Préparation

Visualisons les deux fichiers concernés, “users” et “infos-users”

cat ~/Essai-text-processing/users
01 Toto
02 Titi
03 Lili
cat ~/Essai-text-processing/infos-users
 
toto@gmail.com 01
titi@gmx.fr 02
lili@hotmail.com 03

Regroupement des lignes des deux fichiers

paste ~/Essai-text-processing/users ~/Essai-text-processing/infos-users
01 Toto	toto@gmail.com 01
02 Titi	titi@gmx.fr 02
03 Lili	lili@hotmail.com 03

Concaténation du retour dans un fichier "paste-users-infos" qui sera créé

paste ~/Essai-text-processing/users ~/Essai-text-processing/infos-users > ~/Essai-text-processing/paste-users-infos

Vérification

01 Toto	toto@gmail.com 01
02 Titi	titi@gmx.fr 02
03 Lili	lili@hotmail.com 03

sort

Syntaxe

sort [options [+POS1] [-POS2]] [fichier...]
La commande sort permet :
  • d'afficher le contenu de fichiers ;
  • de trier les lignes d'un fichier texte, en fonction des colonnes.

Les options utiles:

  • -o : inscrire la sortie dans un fichier
  • -t : pour spécifier le séparateur (par défaut ce sont les espaces ou les tabulations qui délimitent les colonnes)
  • -k : pour spécifier la colonne (à la place de +POS1 -POS2)
  • -n : pour spécifier qu'il s'agit d'un tri numérique
  • -d : pour tri dictionnaire
  • -r : pour un tri inverse (-rn [inverse de numérique] ou -rd [inverse d'alphabétique])
  • -M : ordre chronologique
  • -h : comparer des nombres dans un format lisible par un humain (par exemple, 2K 1G)
  • -f : (ignore-case) convertir les minuscules en majuscule

Voir man sort pour les autres options.

Affichage de plusieurs fichiers avec sort

  • Comparaison avec la commande cat :
cat sort1.txt
5 1 Amandine
1 7 Bruno 
3 2 Caroline
cat sort2.txt
<code>===
2 5 Daniel
2 6 Émilien
0 3 Fabrice
0 4 Guillaume
Dans chacun de ses deux fichiers, les lignes ne sont pas rangées en fonction des colonnes
sort sort1.txt sort2.txt
0 3 Fabrice
0 4 Guillaume
1 7 Bruno 
2 5 Daniel
2 6 Émilien
3 2 Caroline
5 1 Amandine
Même sans option, les deux fichiers ont été concaténés et leurs lignes rangées par ordre numérique croissant en fonction de la première colonne.
Si des doublons apparaissent dans la première colonne pour deux lignes consécutives, ces deux lignes seront rangées en fonction de leur deuxième colonne.

Enregistrer le résultat : option -o

  • Concaténer “sort1.txt” et “sort2.txt” et inscrire le résultat dans un fichier :
sort -o sort3.txt sort1.txt sort2.txt
cat sort3.txt
0 3 Fabrice
0 4 Guillaume
1 7 Bruno 
2 5 Daniel
2 6 Émilien
3 2 Caroline
5 1 Amandine

Trier selon un ordre alphabétique d'une colonne : option -d

  • soit le fichier “alpha-sort.txt” déjà trié par ordre numérique selon les colonnes 1 et 2 pour les doublons :
cat alpha-sort.txt
1 2 Francine
2 3 Édith
3 4 Géraldine
4 5 Béatrice
5 6 Christelle
5 7 Dorothée
6 8 Amanda
  • Pour le trier selon l'ordre alphabétique d'une colonne :

Si on indique le type (numérique ou alphabétique), c'est que le type de la première colonne ne nous intéresse pas.
Par exemple ici, le fichier est rangé selon l'ordre numérique selon ses colonnes 1 et 2.

sort -k3d alpha-sort.txt
6 8 Amanda
4 5 Béatrice
5 6 Christelle
2 3 Édith
5 7 Dorothée
1 2 Francine
3 4 Géraldine
l'option -k pour indiquer qu'on va utiliser une colonne spécifique pour le tri;
3 pour spécifier le n° de colonne
d pour spécifier le type de tri “dictionnaire” ou ordre alphabétique

Trier selon l'ordre numérique d'une colonne

  • soit le fichier “sort.txt” :
cat sort.txt
 
pomme 2
fraise 6
abricot 9
kiwi 3
  • Pour ordonner ce fichier selon l'ordre numérique de la deuxième colonne :
sort -k2n sort.txt
pomme 2
kiwi 3
fraise 6
abricot 9
Si on avait voulu ranger ce fichier selon l'ordre alphabétique, il aurait suffi de faire :
sort sort.txt 

Il aurait été inutile d'indiquer la colonne car la première colonne comporte des chaînes de caractères.

Comme vous l'aurez compris, par défaut, sort trie en fonction de la colonne n°1 selon le type qui est le sien, puis s'il faut, en fonction de la colonne n° 2, et du type qui est celui de cette deuxième colonne.

En fait, sed s'adapte automatiquement au type du contenu de la première colonne, voire au type du contenu de la seconde colonne pour départager éventuellement les doublons de cette première colonne, même si les types diffèrent d'une colonne à l'autre.

Tri par défaut d'un fichier dont les colonnes présentent plusieurs types

  • Soit fichier “xxx-sort.txt” désordonné selon ses types :
cat xxx-sort.txt 
10 fraise
pomme 6
Titi grosminet
25 8
  • Par défaut, sort trie selon l'ordre numérique d'abord puis par ordre alphabétique :
sort xxx-sort.txt
 
10 fraise
25 8
pomme 6
Titi grosminet
  • de même pour l'autre colonne :
sort -k2 xxx-sort.txt
pomme 6
25 8
10 fraise
Titi grosminet

Trier selon plusieurs colonnes et différents types

  • Soit le fichier “sort4.txt” qui est un extrait du fichier /etc/passwd dont j'ai pris quelques lignes que ai interverties pour cet exemple :
cat sort4.txt
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
root:x:0:0:root:/root:/bin/bash
man:x:6:12:man:/var/cache/man:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
  • Pour faire un tri selon le shell des utilisateurs (7ième colonnes : type “dictionnaire”) et en cas de doublon pour cette colonne, en fonction ensuite de l'UID (3ième colonne : type “numérique”)
sort -t':' -k 7d -k 3n sort4.txt
-t':' pour spécifier le séparateur : (par défaut c'est l'espace ou la tabulation, il faut donc indiquer le séparateur pour les fichiers de type.)
-k pour indiquer les colonnes souhaitées
7d pour 7ième colonne type “dictionnaire”
3n pour 3ième colonne type “numérique”
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync

la commande tr

Elle permet de traduire, c'est-à-dire, changer des lettres

Syntaxe

tr [options] ens1 ens2

Exemples

cat ~/Essai-text-processing/tr-essai
Pierre Paul Jacques
tr P p  < ~/Essai-text-processing/tr-essai
pierre paul Jacques
cat ~/Essai-text-processing/tr-essai
Pierre Paul Jacques
tr P X  < ~/Essai-text-processing/tr-essai
Xierre Xaul Jacques
cat ~/Essai-text-processing/tr-essai
Pierre Paul Jacques
tr PJ pj < ~/Essai-text-processing/tr-essai
pierre paul jacques

La commande uniq

Elle permet d'éliminer les lignes dupliquées d'un fichier trié.

Syntaxe

uniq [options] [fichier-entrée] [fichier-sortie]

Préparation

cat ~/Essai-text-processing/users-uniq
Papi
1 Toto
3 Lili
2 Titi
4 Mami
003 Zaza
01 Nani

Ajouter une ligne

echo 01 Nani >> ~/Essai-text-processing/users-uniq

Supprimer les doublons

cat ~/Essai-text-processing/users-uniq
5 Papi
1 Toto
3 Lili
2 Titi
4 Mami
003 Zaza
01 Nani
01 Nani
Il faut que les doublons soient consécutifs, et que le fichier soit “trié”
sort ~/Essai-text-processing/users-uniq | uniq > ~/Essai-text-processing/users-sort-uniq

Vérification

cat ~/Essai-text-processing/users-sort-uniq
003 Zaza
01 Nani
1 Toto
2 Titi
3 Lili
4 Mami
5 Papi

La commande split

Syntaxe

split [options] [fichier_entrée [préfixe_sortie]]

Préparation

  • Création du fichier “~/Essai-text-processing/liste-fruits” :
cat > ~/Essai-text-processing/liste-fruits <<EOF
> 1 fraise
> 2 abricot
> 3 pomme
> EOF
  • Vérification :
cat ~/Essai-text-processing/liste-fruits
1 fraise
2 abricot
3 pomme

Découpage par taille et répartition en autant de fichiers

  • options de découpage par taille :

-C : découper par taille maximale
ex: split -C 5 fichier : découpage en 5 octets

  ( ou de même split -C 5b)\\
 
  split -C 5k fichier : découpage en 5 kilo-octets\\
  split -C 5m fichier : découpage en 5 mega-octets\\

-b : découper par 1 taille précise
Ex: split -b 5 fichier) ⇒ tous les fichiers créés par découpage auront cette taille (sauf peut-être le dernier)

  • Remarque:

Il faut 8 bits pour faire 1 byte (1 octet)

  1. bit : c'est BinaryDigiT : un bit est un chiffre binaire, la valeur d'un bit, c'est 0 ou 1.
  2. byte : terme anglais pour octet. L'ordinaire calcule sur un ou plusieurs byte.
  • Exemple de découpage par taille d'un octet avec le préfixe fruit1b :
split -C 1b ~/Essai-text-processing/liste-fruits fruit1b
Le fichier n'est pas lourd et le découpage en taille de 1 byte (=octet) ne le découpe pas :
ls fruit1b*
fruit1baa
Un seul fichier a été créé.
cat fruit1b*
1 fraise
2 abricot
3 pomme
Le fichier est créé dans le répertoire dans lequel le terminal est ouvert.

Pour que le fichier créé, lors du découpage, se retrouve dans le répertoire du fichier à découper :

split -C 1b ~/Essai-text-processing/liste-fruits fruit1b && mv fruit1b* ~/Essai-text-processing/
 
ls ~/Essai-text-processing/fruit1b*
/home/hypathie/Essai-text-processing/fruit1baa
  • Ou encore :
cd Essai-text-processing/
split -C 1b ~/Essai-text-processing/liste-fruits fruit1b
ls fruit1b*
fruit1baa

Découpage par ligne

  • option de découpage par ligne qui détermine le découpage :
    1. l : pour indiquer le nombre de ligne
  • Remarque :

Sans indication de préfixe, par défaut les fichiers créés par le découpage porte le préfixe x??

cd Essai-text-processing/
split -l 1 ~/Essai-text-processing/liste-fruits
 ls x*
xaa  xab  xac
 cat x*
1 fraise
2 abricot
3 pomme

La commande unexpand

La commande “unexpand” peut servir à convertir un groupe de sept espaces en une tabulation.

Syntaxe

unexpand [-a] [fichier...]

Préparation

  • Création du fichier “~/Essai-text-processing/users-infos-espaces”
  • Avec 7 ou plus espaces pour ligne 1 et 3
  • Avec moins de 7 espaces pour ligne 2
cat > ~/Essai-text-processing/users-infos-espaces<<EOF
>         01        Toto        toto@gmx.fr        modo
>        02       Titi       titi@gmail.com       membre
>          03         Lili         lili@hotmail.com         membre
> EOF
Ci-dessus ce sont plusieurs espaces qui sont insérés entre les chaînes de caractères. Pour intégrer le contenu d'un fichier avec les redirections et EOF, la touche tabulation ne fonctionne pas.

Convertir des espaces en tabulation

Affichage avec cat : ce sont des espaces

cat ~/Essai-text-processing/users-infos-espaces
# Retour :
        01        Toto        toto@gmx.fr        modo
       02       Titi       titi@gmail.com       membre
         03         Lili         lili@hotmail.com         membre

Conversion des espaces en tabulation

unexpand -a ~/Essai-text-processing/users-infos-espaces
	01	  Toto	      toto@gmx.fr	 modo
       02	Titi	   titi@gmail.com	membre
	 03	    Lili	 lili@hotmail.com	  membre
  • Option -a pour que la conversion des espaces ait lieu partout et pas seulement pour les espaces constituants la première colonnes de droite.
  • Les groupes de moins de sept espaces consécutifs n'ont pas été convertis en tabulation.

La commande "expand"

La commande “expand” peut servir à convertir les tabulations en espaces.

Syntaxe

expand [-t numero] [fichier...]

Préparation

Soit le fichier “~/Essai-text-processing/users-infos-tabul” contenant des tabulations

unexpand -a ~/Essai-text-processing/users-infos-espaces > ~/Essai-text-processing/users-infos-tabul

Visualisation

cat ~/Essai-text-processing/users-infos-tabul
# Retour :
	01	  Toto	      toto@gmx.fr	 modo
       02	Titi	   titi@gmail.com	membre
	 03	    Lili	 lili@hotmail.com	  membre

Convertion des tabulations en espaces

expand ~/Essai-text-processing/users-infos-tabul
# Retour :
        01        Toto        toto@gmx.fr        modo
       02       Titi       titi@gmail.com       membre
         03         Lili         lili@hotmail.com         membre

Déterminer le nombre d'espaces qui remplaceront chaque tabulation

  • option -t nombre
expand -t 1 ~/Essai-text-processing/users-infos-tabul
# Retour :
 01   Toto       toto@gmx.fr  modo
       02 Titi    titi@gmail.com membre
  03     Lili  lili@hotmail.com   membre

Aller plus loin avec les commandes expand et unexpand

Voir : expand

1)
N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !
doc/systeme/commandes/les-commandes-join-paste-split-et-nl.1407340263.txt.gz · Dernière modification: 06/08/2014 17:51 par Hypathie

Pied de page des forums

Propulsé par FluxBB