====== D'autres commandes pour la gestion des fichiers-texte ====== * Objet : Voici d'autres commandes pour la gestion de fichiers texte * Niveau requis : {{tag>débutant avisé}} * Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !]] :-) * Suivi : {{tag>à-tester}} * Création par [[user>Hypathie]] le 07/06/2014 * Testé par <...> le <...> * Commentaires sur le forum : [[http://debian-facile.org/viewtopic.php?pid=92369#p92369 | Lien vers le forum concernant ce tuto]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) ===== Introduction ===== Pour les commandes principales de gestion des fichiers : * [[doc:systeme:commandes:creer|Les commandes Linux de gestion des fichiers et répertoires]] 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 < 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) * Voir [[doc:editeurs:less| la commande less]] =====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 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 :\\ - -b : numérotation des lignes vides - -b -t[expression régulière] : affiche tout mais numérote les lignes qui correspondent à l'expression régulière - -n ln : affichage avec numérotation tout à droit. - -n rn : affichage par défaut, c'est-à-dire avec une tabulation à droite avec le chiffre de la numérotation. - -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 =====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 < 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) - bit : c'est **Bi**naryDigi**T** : un bit est un chiffre binaire, la valeur d'un bit, c'est 0 ou 1. - 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 :\\ -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< 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 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 constituant la première colonne 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 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 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 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 : [[doc:systeme:expand |expand]]