wc -l file.txt
génère le nombre de lignes et le nom du fichier.
J'ai juste besoin du numéro lui-même (pas du nom du fichier).
je peux le faire
wc -l file.txt | awk '{print $1}'
Mais peut-être existe-t-il un meilleur moyen?
wc -l file.txt
génère le nombre de lignes et le nom du fichier.
J'ai juste besoin du numéro lui-même (pas du nom du fichier).
je peux le faire
wc -l file.txt | awk '{print $1}'
Mais peut-être existe-t-il un meilleur moyen?
Réponses:
Essayez de cette façon:
wc -l < file.txt
wc -lne devrait pas en émettre un, et pourquoi ksh ajouterait-il un espace à la sortie standard d'un programme?
4711 [stdin]la sortie.
printf "%'d", qui prend soin de l'espace et imprime bien les grands nombres.
cat file.txt | wc -l
D'après 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'à la réception d'EOF, ou [^ D] dans la plupart des environnements.
wc -l < file.txta le même effet.
wc -l < file.txtpour éviter l'utilisation inutile de cat. Bien que vous soyez absolument fou si vous pensez que cela prend un temps notable.
Pour ce faire sans l'espace de tête, pourquoi pas:
wc -l < file.txt | bc
wc -l < file.txtpour corriger l'erreur d'analyse et supprimer l'espace:wc -l < file.txt | bc
Que diriez-vous
wc -l file.txt | cut -d' ' -f1
c'est-à-dire diriger la sortie de wcinto cut(où les délimiteurs sont des espaces et ne sélectionner que le premier champ)
wc -l file.txt | awk '{print $1}'OP essayé.
wc -l < file.txtméthode. Mais doit utiliser | cut -d' ' -f2sur BSD, tant que la wccommande renvoie un espace de début, exemple: "34068289 file.txt", au lieu de "34068289 file.txt".
J'ai eu un problème similaire en essayant d'obtenir un nombre de caractères sans le premier espace blanc 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, c'est pour le nombre de caractères; pour le nombre de lignes que vous feriez wc -l. echo -nomet le saut de ligne de fin.
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 me fierais pas à la cut -f*méthode en général, car elle nécessite que vous connaissiez le nombre exact d'espaces de début qu'une sortie donnée peut avoir. Et grepcelui fonctionne pour compter les lignes, mais pas les caractères.
bcest le plus concis awket perlsemble un peu exagéré, mais ils devraient tous être assez rapides et suffisamment portables.
Notez également que certains d'entre eux peuvent également être adaptés pour couper les espaces blancs environnants à partir de chaînes générales (avec echo `echo $FOO`une autre astuce intéressante).
echo $(printf '%s' "$FOO" | wc -c)est l'une des rares occasions où echoavec une commande la subshitution n'est pas inutile.
echo `echo $FOO`;agit également comme une commande String.trim () sur une variable! C'est incroyablement pratique. J'ajouterai également votre ligne à ma réponse.
printfmieux que echo?
De toute évidence, il existe de nombreuses solutions à cela. En voici un autre cependant:
wc -l somefile | tr -d "[:alpha:][:blank:][:punct:]"
Cela ne produit 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-le [:blank:]par [:space:].
test9avec 1 ligne, le résultat sera 19.
Le meilleur moyen serait tout d'abord de trouver tous les fichiers dans le répertoire, puis d'utiliser AWK NR (Variable du nombre 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}'
wc -l < file.txtfait le travail avec précision et concision.