Commande wc : compter les lignes et les mots, et utiliser wc -l avec des pipes

Environnement de testFamille RHELAlmaLinux 9.8Compte rootVérifié le 2026-10-29

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/work
wc access.log
 10 100 766 access.log

Dans 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.log
10 access.log
wc -w access.log
100 access.log
wc -c access.log
766 access.log

Si vous indiquez un fichier qui n'existe pas, un message d'erreur s'affiche et le code de sortie est 1.

wc nosuch.txt
wc: nosuch.txt: No such file or directory
echo $?
1

2️⃣ 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.log
10
cat access.log | wc -l
10

En 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 -l
3

Pour 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 -u
192.0.2.10
192.0.2.44
198.51.100.7
203.0.113.25
cut -d ' ' -f 1 access.log | sort -u | wc -l
4

wc -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.txt
first line
last line
wc -l no-newline.txt
1 no-newline.txt

Si 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
아메리카노
카페 라테 ☕
tea
wc -c menu.txt
38 menu.txt
wc -m menu.txt
18 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.log
82 access.log
wc -L menu.txt
12 menu.txt

Les 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.txt
café
wc -c cafe.txt
6 cafe.txt
wc -m cafe.txt
5 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âcheCommandeMesuré dans cet article
Obtenir seulement le nombre de ligneswc -l < access.log10Le nombre seul, sans le nom du fichier
Compter les lignes qui remplissent une conditiongrep ‘ 404 ‘ access.log | wc -l3Lignes avec une réponse 404
Compter les valeurs différentescut -d ‘ ‘ -f 1 access.log | sort -u | wc -l4Nombre d'IP différentes
Vérifier la taille du fichierwc -c access.log766Nombre d'octets
Nombre de caractères d'un fichier contenant du coréenwc -m menu.txt1838 si l'on compte le même fichier avec -c
Largeur d'affichage de la ligne la plus longuewc -L access.log8212 pour le fichier de menu, qui compte chaque caractère coréen sur deux colonnes
Total des lignes de plusieurs fichierswc -l *.log13Total 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 total

Pour 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 total

Les 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.

Simulateur de la commande wcwc, compte root
[root@server work]#
Les touches ↑↓ rappellent les commandes saisies auparavant.

🔢 FAQ & contenus recommandés

Oui, quand vous comptez les lignes qui remplissent une condition dans un seul fichier. Sur le même journal d'accès, grep -c avec la même condition a aussi donné 3. grep -c se suffit d'une seule commande sans pipe, tandis que wc -l sert à compter la sortie d'autres commandes que grep, comme sort ou cut.

Chaque bloc séparé par des espaces, des tabulations ou des sauts de ligne compte comme un mot. Le résultat de [echo ‘log_level=warn timeout = 30’ | wc -w] est 4. log_level=warn, sans espace, compte comme un mot, et le = entouré d'espaces compte comme un mot à part.

Sélectionnez uniquement les fichiers avec find et passez-les à wc -l. Dans le dossier d'exemple, [find /root/work -type f | wc -l] a affiché 5. [ls | wc -l] a aussi donné 5 dans le même dossier, mais ls affiche aussi les noms des sous-dossiers comme des lignes et ne compte pas les fichiers qu'ils contiennent.

ℹ️ 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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Prouvez que vous êtes humain : 8   +   7   =