wc -l file.txt
affiche le nombre de lignes et le nom du fichier.
J'ai juste besoin du numéro lui-même (pas le nom du fichier).
Je peux le faire
wc -l file.txt | awk '{print $1}'
Mais peut-être qu'il y a un meilleur moyen?
Essayez de cette façon:
wc -l < file.txt
cat file.txt | wc -l
Selon la page de manuel (pour la version BSD, je n'ai pas de version GNU à vérifier):
Si aucun fichier n'est spécifié, l'entrée standard est utilisée et aucun nom de fichier n'est affiché. L'invite acceptera l'entrée jusqu'à ce qu'elle reçoive EOF ou [^ D] dans la plupart des environnements.
Pour ce faire sans l'espace principal, pourquoi pas:
wc -l < file.txt | bc
Que diriez-vous
wc -l file.txt | cut -d' ' -f1
acheminez la sortie de wc
dans cut
(où les délimiteurs sont des espaces et ne sélectionnez que le premier champ)
J'ai eu un problème similaire en essayant d'obtenir un nombre de caractères sans le blanc principal fourni par wc
, ce qui m'a conduit à cette page. Après avoir essayé les réponses ici, voici les résultats de mes tests personnels sur Mac (BSD Bash). Encore une fois, cela concerne le nombre de personnages; pour le nombre de lignes, vous feriez wc -l
. echo -n
omet la fin de ligne.
FOO="bar"
echo -n "$FOO" | wc -c # " 3" (x)
echo -n "$FOO" | wc -c | bc # "3" (√)
echo -n "$FOO" | wc -c | tr -d ' ' # "3" (√)
echo -n "$FOO" | wc -c | awk '{print $1}' # "3" (√)
echo -n "$FOO" | wc -c | cut -d ' ' -f1 # "" for -f < 8 (x)
echo -n "$FOO" | wc -c | cut -d ' ' -f8 # "3" (√)
echo -n "$FOO" | wc -c | Perl -pe 's/^\s+//' # "3" (√)
echo -n "$FOO" | wc -c | grep -ch '^' # "1" (x)
echo $( printf '%s' "$FOO" | wc -c ) # "3" (√)
Je ne m'appuierais pas sur la méthode cut -f*
en général, car elle nécessite de connaître le nombre exact d'espaces en tête qu'une sortie donnée peut avoir. Et le grep
one fonctionne pour compter les lignes, mais pas les caractères.
bc
est le plus concis, et awk
et Perl
semblent un peu excessifs, mais ils devraient tous être relativement rapides et suffisamment portables.
Notez également que certains d'entre eux peuvent également être adaptés pour réduire l'espace blanc des chaînes générales (ainsi que echo `echo $FOO`
, autre astuce intéressante).
Que diriez-vous
grep -ch "^" file.txt
De toute évidence, il y a beaucoup de solutions à cela. Voici un autre si:
wc -l somefile | tr -d "[:alpha:][:blank:][:punct:]"
Cela ne génère que le nombre de lignes, mais le caractère de fin de ligne (\n
) est présent. Si vous ne le souhaitez pas non plus, remplacez [:blank:]
par [:space:]
.
Le meilleur moyen serait d’abord de trouver tous les fichiers dans le répertoire, puis d’utiliser AWK NR (nombre de variables d’enregistrements)
ci-dessous est la commande:
find <directory path> -type f | awk 'END{print NR}'
exemple: - find /tmp/ -type f | awk 'END{print NR}'