10 jeux amusants à jouer dans le terminal Linux
Agence web » Actualités du digital » Comment utiliser la commande wc sous Linux

Comment utiliser la commande wc sous Linux

Compter le nombre de lignes, de mots et d’octets dans un fichier est utile, mais la véritable flexibilité de Linux wc commande vient de travailler avec d’autres commandes. Nous allons jeter un coup d’oeil.

Qu’est-ce que la commande wc ?

La wc La commande est une petite application. C’est l’un des principaux utilitaires Linux, il n’est donc pas nécessaire de l’installer. Il sera déjà sur votre ordinateur Linux.

Vous pouvez décrire ce qu’il fait en très peu de mots. Il compte les lignes, les mots et les octets d’un fichier ou d’une sélection de fichiers et imprime le résultat dans une fenêtre de terminal. Il peut également tirer son entrée du flux STDIN, ce qui signifie que le texte que vous souhaitez qu’il traite peut y être acheminé. C’est ici que wc commence vraiment à ajouter de la valeur.

C’est un excellent exemple du mantra Linux de « faire une chose et bien la faire ». Parce qu’il accepte les entrées canalisées, il peut être utilisé dans des incantations multi-commandes. Comme nous le verrons, ce petit utilitaire autonome est en fait un excellent joueur d’équipe.

Une façon que j’utilise wc est comme un espace réservé dans une commande compliquée ou un alias que je prépare. Si la commande terminée a le potentiel d’être destructrice et de supprimer des fichiers, j’utilise souvent wc comme remplaçant du vrai et dangereux commandement.

De cette façon, pendant le développement de la commande, j’obtiens un retour visuel indiquant que chaque fichier est traité comme prévu. Il n’y a aucune chance que quelque chose de mal se produise pendant que je lutte avec la syntaxe.

Aussi simple que wc c’est-à-dire qu’il y a encore quelques petites bizarreries que vous devez connaître.

Premiers pas avec wc

La façon la plus simple d’utiliser wc consiste à passer le nom d’un fichier texte sur la ligne de commande.

wc lorem.txt

Utilisation de wc avec un fichier contenant une longue ligne de texte

Ce qui provoque wc pour analyser le fichier et compter les lignes, les mots et les octets, et les écrire dans la fenêtre du terminal.

Les mots sont considérés comme tout ce qui est délimité par des espaces. Qu’il s’agisse de mots d’une langue réelle ou non n’a aucune importance. Si un fichier ne contient que « frd g lkj », il compte toujours comme trois mots.

Les lignes sont des séquences de caractères terminées soit par un retour chariot soit par la fin du fichier. Peu importe si la ligne revient dans votre éditeur ou dans la fenêtre du terminal, jusqu’à ce que wc rencontre un retour chariot ou la fin du fichier, c’est toujours la même ligne.

Notre premier exemple a trouvé une ligne dans tout le fichier. Voici le contenu du fichier « lorem.txt ».

cat lorem.txt

Le contenu du fichier avec une longue ligne

Tout cela compte comme une seule ligne car il n’y a pas de retour chariot. Comparez cela à un autre fichier, « lorem2.txt », et comment wc l’interprète.

wc lorem2.txt
cat lorem2.txt

Utiliser wc avec un fichier contenant plusieurs lignes

Ce temps, wc compte 15 lignes car des retours chariot ont été insérés dans le texte pour commencer une nouvelle ligne à des points spécifiques. Cependant, si vous comptez les lignes contenant du texte, vous verrez qu’il n’y en a que 12.

Les trois autres lignes sont des lignes vides à la fin du fichier. Ceux-ci ne contiennent que des retours chariot. Même s’il n’y a pas de texte dans ces lignes, une nouvelle ligne a été commencée et donc wc les compte comme tels.

On peut passer autant de fichiers à wc comme on aime.

wc lorem.txt lorem2.txt

Utiliser wc avec deux fichiers

Nous obtenons les statistiques pour chaque dossier individuel et un total pour tous les dossiers.

Nous pouvons également utiliser des caractères génériques afin de pouvoir sélectionner des fichiers correspondants au lieu de fichiers explicitement nommés.

wc *.txt *.?

Utiliser wc avec des jokers

Les options de la ligne de commande

Par défaut, wc affichera les lignes, les mots et les octets de chaque fichier. C’est la même chose que d’utiliser le -l (lignes) -w (mots) et -c (octets) options.

wc lorem.txt
wc -l -w -c lorem.txt

Utilisation de wc avec les options lignes, mots et octets

Nous pouvons spécifier quelle combinaison de chiffres nous souhaitons voir.

wc -l lorem.txt

wc -w lorem.txt

wc -c lorem.txt

wc -l -c lorem.txt

Utilisation de wc avec combinaisons d'options

Une attention particulière doit être portée au dernier chiffre, généré par le -c (octets). Beaucoup de gens confondent cela avec le fait de compter les caractères. ça compte en effet octets. Le nombre de caractères et le nombre d’octets pourraient bien être les mêmes. Mais pas toujours.

Examinons le contenu d’un fichier appelé « unicode.txt ».

cat unicode.txt

Le contenu d'un fichier contenant un caractère non latin

Il comporte trois mots et un caractère alphabétique non latin. Eh bien laissez wc traiter le fichier avec son paramètre par défaut de octetset nous le ferons encore mais demande personnages avec le -m (caractères).

wc unicode.txt
wc -l -w -m unicode.txt

Compter les octets dans un fichier puis compter les caractères dans le même fichier

Il y a plus d’octets que de caractères.

Jetons un coup d’œil au vidage hexadécimal du fichier et voyons ce qui se passe. La hexdump commande -C (canonique) affiche les octets du fichier en lignes de 16, avec leur équivalent ASCII simple (s’il y en a un) affiché à la fin de la ligne. S’il n’y a pas de caractère ASCII correspondant, un point « .” s’affiche à la place.

hexdump -C unicode.txt

Un vidage hexadécimal d'un fichier court avec un caractère non latin

En ASCII, une valeur hexadécimale de 0x20 représente un espace. Si nous comptons trois valeurs à partir de la gauche, nous voyons que la valeur suivante est un espace. Donc, les trois premières valeurs 0x62, 0x6fet 0x79 représentent les lettres dans « garçon ».

En sautant par-dessus 0x20nous voyons un autre ensemble de trois valeurs hexadécimales : 0x63, 0x61et 0x74. Ceux-ci épellent « chat ». En sautant sur le caractère d’espace suivant, nous voyons trois autres valeurs pour les lettres dans « chien ». Ceux-ci sont 0x64, 0x5fet 0x67.

Juste derrière le mot « chien », on peut voir un espace 0x20, et cinq autres valeurs hexadécimales. Les deux derniers sont des retours chariot, 0x0a.

Les trois autres octets représentent le caractère non latin, que nous avons entouré de vert. C’est un caractère Unicode, et il faut trois octets pour l’encoder. Ceux-ci sont 0xe1, 0xafet 0x8a.

Assurez-vous donc de savoir ce que vous comptez et que les octets et les caractères ne doivent pas nécessairement être les mêmes. Habituellement, le comptage des octets est plus utile car il vous indique ce qui est réellement à l’intérieur le fichier. Compter par caractères vous donne le nombre de choses représentée par le contenu du fichier.

Prendre des noms de fichiers à partir d’un fichier

Il existe une autre façon de fournir des noms de fichiers à wc . Vous pouvez mettre les noms de fichiers dans un fichier, et passer le nom de ce fichier à wc. Il ouvre le fichier, extrait les noms de fichiers et les traite comme s’ils avaient été passés sur la ligne de commande. Cela vous permet de stocker une collection arbitraire de noms de fichiers pour les réutiliser.

Mais il y a un piège, et c’est un gros problème. Les noms de fichiers doivent être nul résilié, non retour chariot résilié. Autrement dit, après chaque nom de fichier, il doit y avoir un octet nul de 0x00 au lieu de l’octet de retour chariot habituel 0x0a.

Vous ne pouvez pas ouvrir un éditeur et créer un fichier avec ce format. Généralement, des fichiers comme celui-ci sont générés par d’autres programmes. Mais, si vous avez un tel fichier, voici comment vous l’utiliserez.

Voici notre fichier contenant les noms de fichiers. L’ouvrir en less vous montre l’étrange « ^@ » les personnages qui less utilise pour indiquer des octets nuls.

less source-files-list.txt

Un fichier en moins qui contient des octets nuls

Pour utiliser le fichier avec wcnous devons utiliser --files0-from (lire l’entrée depuis) ​​et transmettez le nom du fichier contenant les noms de fichiers.

wc ---files0-from=source-files-list.txt

wc traitant le fichier de noms de fichiers terminés par null

Les fichiers sont traités exactement comme s’ils étaient fournis sur la ligne de commande.

Entrée de tuyauterie vers wc

Un moyen beaucoup plus courant, flexible et productif d’envoyer des données à wc consiste à diriger la sortie d’autres commandes vers wc . Nous pouvons le démontrer avec le echo commande.

echo "Count this for me" | wc
echo -e "Count thisnfor me" | wc

Utiliser echo pour envoyer une entrée à wc

La deuxième echo commande utilise le -e (caractères échappés) pour autoriser les séquences échappées telles que « n” code de formatage de nouvelle ligne. Cela injecte une nouvelle ligne, provoquant wc pour voir l’entrée sous forme de deux lignes.

Voici une cascade de commandes alimentant leur entrée de l’une à l’autre.

find ./* -type f | rev | cut -d'.' -f1 | rev | sort | uniq
  • trouver recherche les fichiers (type -f) récursivement, en commençant dans le répertoire courant. rev inverse les noms de fichiers.
  • Couper extrait le premier champ (-f1) en définissant le délimiteur de champ comme étant un point « . » et la lecture depuis le « devant » du nom de fichier inversé jusqu’au premier point qu’il trouve. Nous avons maintenant extrait l’extension de fichier.
  • tour inverse le premier champ extrait.
  • trier les trie par ordre alphabétique croissant.
  • unique répertorie les entrées uniques dans la fenêtre du terminal.

La liste des extensions uniques dans l'arborescence de répertoires actuelle

Cette commande répertorie toutes les extensions de fichier uniques dans le répertoire actuel et tous les sous-répertoires.

Si nous ajoutions le -c (compter) l’option uniq commande il compterait le occurrences de chaque type d’extension. Mais si nous voulons savoir combien d’extensions de fichiers uniques et différentes existent, nous pouvons supprimer wc comme dernière commande sur la ligne, et utilisez le -l (lignes).

find ./* -type f | rev | cut -d'.' -f1 | rev | sort | uniq | wc -l

Ajout de wc pour compter les extensions uniques

Et enfin

Voici une dernière astuce wc peut faire pour vous. Il vous indiquera la longueur de la ligne la plus longue d’un fichier. Malheureusement, il ne vous dit pas de quelle ligne il s’agit. Cela vous donne juste la longueur.

wc -L taf.c

Obtenir la longueur de la ligne la plus longue dans un fichier avec wc

Attention cependant, les tabulations comptent pour huit espaces. Vu dans mon éditeur, il y a trois onglets à deux espaces au début de cette ligne. Sa longueur réelle est de 124 caractères. Le chiffre rapporté est donc artificiellement élargi.

Je traiterais cette fonction avec une grosse pincée de sel. Et par là, je veux dire ne pas l’utiliser. Sa sortie est trompeuse.

Malgré ses bizarreries, wc est un excellent outil à intégrer dans les commandes canalisées lorsque vous devez compter toutes sortes de valeurs, pas seulement les mots d’un fichier.

★★★★★