web-dev-qa-db-fra.com

Comment savoir combien de lignes un fichier texte contient sans le visualiser?

Comment puis-je trouver le nombre de lignes d'un fichier texte sans ouvrir le fichier dans un éditeur ou une application de visualisation? Existe-t-il une commande de console Unix pratique pour voir le numéro?

49
Ivan

En effet, il y en a. Il s'appelle wc, à l'origine pour le nombre de mots, je crois, mais il peut faire des lignes, des mots, des caractères, des octets (et avec certaines implémentations, la longueur en octets de la ligne la plus longue ou la largeur d'affichage de la plus large une). Le -l option lui dit de compter les lignes (en effet, il compte les caractères de nouvelle ligne, donc uniquement les lignes correctement délimitées):

wc -l mytextfile

Ou pour sortir uniquement le nombre de lignes:

wc -l < mytextfile

(attention, certaines implémentations insèrent des espaces avant ce nombre).

76
Kevin

Une autre option serait d'utiliser grep pour trouver le nombre de fois qu'un modèle est mis en correspondance:

grep --regexp="$" --count /path/to/myfile.txt

Dans cet exemple,

  • $ est une expression qui prend la forme d'une nouvelle ligne (le bouton Entrée est enfoncé)
  • --count supprime la sortie normale des correspondances et affiche le nombre de correspondances.
  • Le /path/to/myfile.txt est assez évident, j'espère :)

EDIT: Comme mentionné par @hesse dans les commentaires, cela peut être abrégé en

grep -c $ path/to/file

Ce qui le rendrait également standard et portable pour les implémentations grep non GNU.

11
DavidDraughn

J'ajouterais également qu'il est assez facile de le faire en pur awk si vous, pour une raison quelconque, souhaitez ne pas utiliser wc.

$ awk 'END { print NR }' /path/to/file

Le prints ci-dessus est le nombre d'enregistrements (NR) présents dans le fichier à /path/to/file.

Remarque: contrairement à wc, cela n'imprimera pas le nom du fichier. Donc, si vous vouliez seulement le numéro, ce serait une bonne alternative à cat file | wc -l.

4
HalosGhost

Comme l'a suggéré @Kevin, vous pouvez utiliser la commande wc pour compter les lignes d'un fichier. Cependant, wc -l test.txt inclura le nom du fichier dans le résultat. Vous pouvez utiliser:

wc -l < test.txt

pour obtenir simplement le nombre de lignes sans nom de fichier. Essaie.

1
Just a learner

Selon mon test, je peux vérifier que l'AWK est bien plus rapide que les autres outils (GREP, SED, AWK, Perl, WC)

Voici le résultat du test que j'ai effectué ici

date +%x_%H:%M:%S; grep -c $ my_file.txt; date +%x_%H:%M:%S; 

10/03/16_09: 41: 51 24579427 10/03/16_09: 42: 40 ~ 49 Secondes

date +%x_%H:%M:%S; wc -l my_file.txt; date +%x_%H:%M:%S; 

10/03/16_09: 35: 05 24579427 my_file.txt 10/03/16_09: 35: 45 ~ 40 secondes

date +%x_%H:%M:%S; sed -n '$=' my_file.txt; date +%x_%H:%M:%S; 

10/03/16_09: 33: 50 24579427 10/03/16_09: 34: 29 ~ 39 Secondes

date +%x_%H:%M:%S; Perl -ne 'END { $_=$.;if(!/^[0-9]+$/){$_=0;};print "$_" }' my_file.txt; date +%x_%H:%M:%S; 

10/03/16_09: 36: 11 24579427 10/03/16_09: 36: 36 ~ 25 secondes

date +%x_%H:%M:%S; awk 'END { print NR }' my_file.txt; date
+%x_%H:%M:%S; 

10/03/16_09: 43: 36 24579427 10/03/16_09: 43: 58 ~ 22 secondes

0
Pramod Tiwari