Commande wc : compter les lignes et les mots, et utiliser wc -l avec des pipes
La commande wc est une commande Linux qui compte et affiche le nombre de lignes, de mots et d'octets d'un fichier. Si vous comptez avec wc -l les lignes d'un fichier d'exemple de journal d'accès d'un serveur web, vous obtenez 10, et si vous filtrez uniquement les réponses 404 avec grep pour les passer à wc -l, vous voyez le nombre de requêtes échouées, 3, sous la forme d'un seul nombre.
Les journaux, le contenu des fichiers et le dossier de travail /root/work ci-dessous sont des valeurs d'exemple. Le journal est un fichier de dix lignes créé avec des adresses IP réservées à la documentation, et les autres fichiers ont eux aussi tous été créés pour les tests.
1️⃣ Utilisation de base de la commande wc et lecture de sa sortie
La forme de base de la commande est wc, puis les options, puis les fichiers. Si vous indiquez seulement un fichier sans option, wc affiche dans l'ordre le nombre de lignes, de mots et d'octets, puis ajoute le nom du fichier à la fin.
cd /root/workwc access.log 10 100 766 access.logDans le résultat du comptage du journal d'accès, 10 est le nombre de lignes, 100 le nombre de mots et 766 le nombre d'octets.
Pour ne voir qu'un seul nombre, ajoutez l'une des options -l, -w ou -c.
wc -l access.log10 access.logwc -w access.log100 access.logwc -c access.log766 access.logSi vous indiquez un fichier qui n'existe pas, un message d'erreur s'affiche et le code de sortie est 1.
wc nosuch.txtwc: nosuch.txt: No such file or directoryecho $?12️⃣ Compter les lignes avec wc -l et les pipes
Quand le nom du fichier s'affiche avec le nombre de lignes, il faut encore retirer ce nom pour enregistrer le nombre dans une variable de script. Si vous passez le fichier par une redirection (<) ou un pipe, wc ne connaît pas le nom du fichier et n'affiche que le nombre.
wc -l < access.log10cat access.log | wc -l10En plaçant grep avant le pipe, vous pouvez compter uniquement les lignes qui remplissent une condition. La recherche incluait les espaces avant et après le code de réponse 404, et trois lignes contenaient 404.
grep ' 404 ' access.log | wc -l3Pour compter combien d'IP se sont connectées, découpez uniquement le premier champ, supprimez les lignes en double avec sort -u, puis comptez. Dans le journal de dix lignes, il y avait quatre IP différentes.
cut -d ' ' -f 1 access.log | sort -u192.0.2.10
192.0.2.44
198.51.100.7
203.0.113.25cut -d ' ' -f 1 access.log | sort -u | wc -l4wc -l compte le nombre de caractères de saut de ligne. C'est pourquoi, pour un fichier sans saut de ligne à la fin de la dernière ligne, wc -l affiche 1 même si cat montre deux lignes.
cat no-newline.txtfirst line
last linewc -l no-newline.txt1 no-newline.txtSi le nombre de lignes est inférieur d'une unité, vérifiez d'abord que la dernière ligne se termine par un saut de ligne.
3️⃣ Options de wc et nombre de caractères avec -c et -m
En UTF-8, les lettres anglaises et les chiffres occupent 1 octet par caractère, tandis que les caractères coréens (hangeul) et ☕ en occupent 3 chacun. Dans un fichier ne contenant que du texte anglais, le nombre d'octets compté avec -c et le nombre de caractères compté avec -m sont donc identiques, mais dès qu'il y a du coréen, les deux nombres diffèrent. La comparaison utilise un fichier avec deux lignes de noms de menu en coréen et une ligne en anglais.
cat menu.txt아메리카노
카페 라테 ☕
teawc -c menu.txt38 menu.txtwc -m menu.txt18 menu.txt-c a donné 38 et -m 18, soit 20 d'écart. Ce sont les 2 octets supplémentaires qu'occupe chacun des neuf caractères coréens et ☕ ; pour un fichier contenant du coréen, comptez donc avec -m pour obtenir le nombre réel de caractères. La mesure a été faite avec la locale C.UTF-8 et, selon le manuel, -m compte selon les unités de caractère de la locale.
-L affiche la largeur d'affichage de la ligne la plus longue. Dans le journal d'accès, la ligne la plus longue faisait 82 colonnes ; dans le fichier de menu, chaque caractère coréen et ☕ occupe deux colonnes, si bien qu'une ligne de 7 caractères a donné 12.
wc -L access.log82 access.logwc -L menu.txt12 menu.txtLes lettres latines accentuées occupent 2 octets par caractère en UTF-8. La mesure a été faite à part avec un fichier ne contenant que la ligne café.
cat cafe.txtcaféwc -c cafe.txt6 cafe.txtwc -m cafe.txt5 cafe.txt-c a donné 6 et -m 5, car le seul é a occupé un octet de plus. Les lettres anglaises et les chiffres occupent 1 octet, les lettres accentuées comme é 2 octets, et les caractères coréens et ☕ 3 octets ; le nombre d'octets change donc même pour un même nombre de caractères.
Le tableau réunit la commande adaptée à chaque tâche et le nombre compté dans cet article.
| Tâche | Commande | Mesuré dans cet article |
|---|---|---|
| Obtenir seulement le nombre de lignes | wc -l < access.log | 10Le nombre seul, sans le nom du fichier |
| Compter les lignes qui remplissent une condition | grep ‘ 404 ‘ access.log | wc -l | 3Lignes avec une réponse 404 |
| Compter les valeurs différentes | cut -d ‘ ‘ -f 1 access.log | sort -u | wc -l | 4Nombre d'IP différentes |
| Vérifier la taille du fichier | wc -c access.log | 766Nombre d'octets |
| Nombre de caractères d'un fichier contenant du coréen | wc -m menu.txt | 1838 si l'on compte le même fichier avec -c |
| Largeur d'affichage de la ligne la plus longue | wc -L access.log | 8212 pour le fichier de menu, qui compte chaque caractère coréen sur deux colonnes |
| Total des lignes de plusieurs fichiers | wc -l *.log | 13Total sur la ligne total |
4️⃣ Total de plusieurs fichiers avec wc sous Linux
Si vous indiquez plusieurs fichiers, wc affiche une ligne par fichier et ajoute le total sur la dernière ligne sous le nom total. En comptant ensemble le journal d'accès et le journal d'erreurs, le 13 de la ligne total est la somme des lignes des deux fichiers.
wc access.log error.log 10 100 766 access.log
3 11 76 error.log
13 111 842 totalPour compter d'un coup les journaux qui ont la même extension, utilisez un caractère générique. Le shell remplace *.log par les noms de fichiers avant de les transmettre, donc le résultat est le même que si vous écriviez chaque nom de fichier.
wc -l *.log 10 access.log
3 error.log
13 totalLes fichiers d'extensions différentes se comptent aussi d'un coup si vous écrivez leurs noms à la suite. Les deux journaux et le fichier de menu comptés ensemble ont donné total 16.
wc -l access.log error.log menu.txt 10 access.log
3 error.log
3 menu.txt
16 total🔲 Simulateur de la commande wc
Dans le simulateur ci-dessous, vous pouvez saisir wc vous-même sur les fichiers d'exemple de l'article. Les puces permettent d'essayer -l, -m et le comptage par pipe, et si vous ajoutez une ligne à access.log avant de compter à nouveau, le nombre augmente.
🔢 FAQ & contenus recommandés
Linux · Texte
Commande sort sous Linux : trier un fichier
Options et exemples de sort pour trier le contenu d'un fichier par ordre alphabétique, croissant ou décroissant.
Linux · Texte
Commande uniq sous Linux
Comment utiliser uniq pour ne garder qu'une seule des lignes en double et compter avec -c combien de fois elles se répètent.
Linux · Texte
Commandes head et tail sous Linux
Options et utilisation de head, qui affiche les 10 premières lignes d'un fichier, et de tail, qui affiche les 10 dernières.
ℹ️ Mention d'affiliation
Le contenu de ce site contient des liens d'affiliation. Lorsqu'un visiteur achète un produit ou un service via l'un de ces liens, le site perçoit une commission du vendeur. Le montant payé par l'acheteur(il baisse lors des promotions ↓), lui, n'augmente pas. Les prix, remises et stocks indiqués correspondent à la date de rédaction et peuvent différer ; vérifiez-les donc auprès du vendeur avant d'acheter. Les produits sont choisis et évalués selon nos propres critères, et les commissions n'influencent ni l'ordre de présentation ni le contenu des évaluations.