Combien de lignes sont dans chaque fichier.
Utilisez wc
, à l'origine pour le nombre de mots, je crois, mais il peut faire des lignes, des mots, des caractères, des octets et la plus grande longueur de ligne. L' -l
option lui dit de compter les lignes.
wc -l <filename>
Cela produira le nombre de lignes dans:
$ wc -l /dir/file.txt
32724 /dir/file.txt
Vous pouvez également diriger des données vers wc
:
$ cat /dir/file.txt | wc -l
32724
$ curl google.com --silent | wc -l
63
Combien de lignes sont dans le répertoire.
Essayer:
find . -name '*.pl' | xargs wc -l
un autre one-liner:
( find ./ -name '*.pl' -print0 | xargs -0 cat ) | wc -l
En passant, la wc
commande compte les nouvelles lignes, pas les lignes. Lorsque la dernière ligne du fichier ne se termine pas par un nouveau code de ligne, cela ne compte pas.
Vous pouvez utiliser grep -c ^, exemple complet:
#this example prints line count for all found files
total=0
find /path -type f -name "*.php" | while read FILE; do
#you see use grep instead wc ! for properly counting
count=$(grep -c ^ < "$FILE")
echo "$FILE has $count lines"
let total=total+count #in bash, you can convert this for another shell
done
echo TOTAL LINES COUNTED: $total
Combien de lignes au total
Pas sûr que j'ai bien compris votre demande. par exemple, cela produira les résultats au format suivant, en indiquant le nombre de lignes pour chaque fichier:
# wc -l `find /path/to/directory/ -type f`
103 /dir/a.php
378 /dir/b/c.xml
132 /dir/d/e.xml
613 total
Sinon, il peut s'avérer utile de ne générer que le nombre total de caractères de nouvelle ligne sans compter le nombre de fichiers par fichier jusqu'à la commande suivante:
# find /path/to/directory/ -type f -exec wc -l {} \; | awk '{total += $1} END{print total}'
613
Plus important encore, j'ai besoin de cela dans un «format lisible par l'homme», par exemple. 12 345 678 plutôt que 12345678
Bash a une fonction printf intégrée dans:
printf "%0.2f\n" $T
Comme toujours, de nombreuses méthodes différentes pourraient être utilisées pour obtenir les mêmes résultats que ceux mentionnés ici.
printf
ne lit pas ses arguments depuisstdin
, mais plutôt depuis la ligne de commande (comparez piping àecho
vs piping àcat
;cat
lit à partir destdin
,echo
ne lit pas). Utilisez plutôtprintf "$(find ... | xargs ...)"
pour fournir la sortie en tant qu'arguments àprintf
.Dans de nombreux cas, la combinaison de la
wc
commande et du caractère générique*
peut suffire.Si tous vos fichiers sont dans un seul répertoire, vous pouvez appeler:
Vous pouvez également lister plusieurs fichiers et répertoires:
Cette commande affichera une liste des fichiers et leur nombre de lignes.
La dernière ligne sera la somme des lignes de tous les fichiers.
Pour compter tous les fichiers d’un répertoire de manière récursive:
Tout d’abord, activez globstar en ajoutant
shopt -s globstar
à votre fichier .bash_profile. La prise en charge de globstar nécessite Bash ≥ 4.x qui peut être installé avecbrew install bash
si nécessaire. Vous pouvez vérifier votre version avecbash --version
.Puis lancez:
Notez que cette sortie sera incorrecte si globstar n’est pas activé.
la source
wc -l **/*
wc: parent_dir/child_dir: read: Is a directory
"Cette commande donnera une liste de code de lignes dans chaque répertoire:
la source
un peu tard pour le jeu, mais j'ai eu un tas d'erreurs d'argument avec ce qui précède en raison de la taille du répertoire. Cela a fonctionné pour moi:
for i in $(find . -type f); do wc -l $i; done >> /home/counts.txt
la source
cat
combinerait les fichiers en un seul et sortirait le tout sur stdout, vous pouvez fairewc -l
cela pour un nombre total de lignes de fichiers dans un répertoire:la source
Je vais juste augmenter la réponse @malyy pour le suivant (trop grand pour un commentaire):
Beaucoup de réponses utilisent l'
wc
option de fichier en ligne de commande avecxargs
. Le problème, c’est que xargs se limite à une taille de plate-forme relativement petite.De plus, il existe une différence entre BSD (macOS) et GNU (linux / homebrew)
wc
.GNU est idéal car il peut lire la liste de fichiers à partir d’un fichier au lieu d’arguments (
--files0
).Si vous êtes sur mac et avez homebrew, vous devriez faire ce qui suit:
Remarquez le gwc au lieu de wc .
la source