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
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
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:
$ LINECT=0; while read -r LINE; do (( LINECT++ )); done < file.txt; echo $LINECT
$ Perl -lne 'END { print $. }' file.txt
et beaucoup moins lisible:
$ Perl -lne '}{ print $.' file.txt
$ awk 'END {print NR}' file.txt
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
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
.
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.