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?
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).
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./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.
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 print
s 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
.
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.
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