web-dev-qa-db-fra.com

compter les lignes dans un fichier

Je suis sûr qu'il existe plusieurs façons de procéder: comment puis-je compter le nombre de lignes dans un fichier texte?

$ <cmd> file.txt
1020 lines
75
Chris Smith

La méthode standard est avec wc, qui prend des arguments pour spécifier ce qu'il doit compter (octets, caractères, mots, etc.); -l est pour les lignes:

$ wc -l file.txt
1020 file.txt
109
Michael Mrozek

Comme Michael l'a dit, wc -l est la voie à suivre. Mais, au cas où vous auriez inexplicablement bash, Perl ou awk mais pas wc, voici quelques solutions supplémentaires:

Bash uniquement

$ LINECT=0; while read -r LINE; do (( LINECT++ )); done < file.txt; echo $LINECT

Solutions Perl

$ Perl -lne 'END { print $. }' file.txt

et beaucoup moins lisible:

$ Perl -lne '}{ print $.' file.txt

Awk Solution

$  awk 'END {print NR}' file.txt
17
Steven D

Steven D a oublié GNU sed:

sed -n '$=' file.txt

De plus, si vous voulez le nombre sans sortir le nom du fichier et que vous utilisez wc:

wc -l < file.txt

Juste pour le plaisir:

cat -n file.txt | tail -n 1 | cut -f1

Mot d'avertissement lors de l'utilisation

wc -l

car wc -l fonctionne en comptant\n, si la dernière ligne de votre fichier ne se termine pas par une nouvelle ligne, le nombre de lignes sera désactivé de 1. (d'où l'ancienne convention laissant la nouvelle ligne à la fin de votre fichier)

Étant donné que je ne peux jamais être sûr si un fichier donné suit la convention de terminer la dernière ligne avec une nouvelle ligne ou non, je recommande d'utiliser l'une de ces commandes alternatives qui incluront la dernière ligne dans le décompte indépendamment de la nouvelle ligne ou non.

sed -n $= filename
Perl -lne 'END { print $. }' filename
awk 'END {print NR}' filename
grep -c '' filename
11
pretzels1337

Dans le cas où vous n'avez que bash et absolument aucun outil externe disponible, vous pouvez également effectuer les opérations suivantes:

count=0
while read
do
  ((count=$count+1))
done <file.txt
echo $count

Explication: la boucle lit l'entrée standard ligne par ligne (read; puisque nous ne faisons rien de toute façon avec l'entrée de lecture, aucune variable n'est fournie pour la stocker) et augmente la variable count à chaque fois . En raison de la redirection (<file.txt après done), l'entrée standard pour la boucle provient de file.txt.

3
celtschk

Vous pouvez toujours utiliser la commande grep comme suit:

grep -c "^" file.txt

Il comptera toutes les lignes réelles de file.txt, que sa dernière ligne contienne ou non un caractère LF à la fin.

2
Paolo