Comment obtenir des “wc-l” pour imprimer simplement le nombre de lignes sans nom de fichier?
wc -l file.txt
sorties nombre de lignes et de nom de fichier.
J'ai besoin seulement le nombre lui-même (et non le nom de fichier).
Je peux faire ce
wc -l file.txt | awk '{print $1}'
Mais peut-être il ya une meilleure façon?
wc -l < file.txt
fait le travail avec précision et de manière concise.- Double Possible de obtenir l'entier de wc dans bash
- C'est une question que j'ai regardé à deux fois. Ce comportement de wc n'est pas intuitif et anti-paradigmatique pour -nix habitude de concision. Cette concision est là pour une raison, parce que vous exactement ne veulent pas travailler autour de toutes sortes de moelleux à la redondance. Après tout, je sais que le nom de fichier, n'est-ce pas? Ce que je veux, c'est le nombre de lignes.
Vous devez vous connecter pour publier un commentaire.
Essayer de cette façon:
wc -l
ne devrait pas émettre une, et pourquoi ksh faire précéder la sortie standard d'un programme avec un espace?4711 [stdin]
que la sortie.Selon la page de man (pour la version BSD, je n'ai pas de version GNU de vérifier):
wc -l < file.txt
a le même effet.wc -l < file.txt
pour éviter l'inutile l'utilisation de la cat. Même si vous êtes complètement fou si vous pensez que c'est de consommer tout temps.De le faire sans l'espace, pourquoi pas:
wc -l < file.txt
pour corriger l'erreur d'analyse et de supprimer l'espace:wc -l < file.txt | bc
Comment sur
c'est à dire de rediriger la sortie de
wc
encut
(où les délimiteurs sont des espaces et de choisir le premier champ)wc -l file.txt | awk '{print $1}'
OP essayé.wc -l < file.txt
méthode. Mais doit utiliser| cut -d' ' -f2
sur BSD, aussi longtemps que lewc
commande retourne un espace, par exemple: "34068289 file.txt" au lieu de "34068289 file.txt".Comment sur
grep
mais cette vérification, il s'avère (sans surprise) à 2x à 6x plus lent que le plus simple/simplewc
méthode dans mes tests.Comparaison des Techniques de
J'ai eu un problème similaire il tentait d'obtenir un nombre de caractères sans le les espaces fournis par
wc
, ce qui m'a amené à cette page. Après avoir essayé les réponses ici, voici les résultats de mon test sur Mac BSD (Bash). Encore une fois, c'est pour le nombre de caractères; pour le nombre de lignes que vous souhaitez fairewc -l
.echo -n
omet la fin de saut de ligne.Je ne voudrais pas compter sur la
cut -f*
méthode en général puisqu'elle exige de connaître le nombre exact des espaces que toute sortie peut avoir. Et legrep
on travaille pour le comptage des lignes, mais pas de caractères.bc
est la plus concise, etawk
etperl
sembler un peu exagéré, mais ils doivent tous être relativement rapide et assez portable.Également noter que certains de ces peut être adapté pour les garnitures entourant les espaces de général des chaînes, ainsi (avec
echo `echo $FOO`
, une autre astuce).echo $(printf '%s' "$FOO" | wc -c)
est l'une des rares occasions où lesecho
avec une commande subshitution n'est pas inutile.echo `echo $FOO`;
agit également comme une Chaîne de caractères.trim() de commande dans une variable! C'est incroyablement pratique. Je vais aussi ajouter à votre ligne de ma réponse.printf
mieux queecho
?Évidemment, il y a beaucoup de solutions à ce.
Voici un autre bien:
wc -l somefile | tr -d "[:alpha:][:blank:][:punct:]"
Ce ne renvoie le nombre de lignes, mais la fuite caractère de saut de ligne (
\n
) est présent, si vous ne voulez pas que ce soit, de remplacer[:blank:]
avec[:space:]
.Meilleure façon serait tout d'abord trouver tous les fichiers dans le répertoire, puis utiliser AWK NR (Nombre de Dossiers Variable)
ci-dessous est la commande :
exemple : -
find /tmp/-type f | awk 'END{print NR}'