112 votes

obtenir seulement l'entier de wc dans bash

Existe-t-il un moyen d’obtenir le nombre entier renvoyé par wc dans bash?

En gros, je veux écrire les numéros de ligne et le nombre de mots à l'écran après le nom du fichier.

output: filename linecount wordcount Voici ce que j'ai jusqu'à présent:

 files=`ls`
for f in $files;
do
        if [ ! -d $f ] #only print out information about files !directories
        then
                # some way of getting the wc integers into shell variables and then printing them
                echo "$f $lines $ words"
        fi
done
 

85voto

BananaNeil Points 1351

Réponse la plus simple jamais:

 wc < filename 
 

82voto

user1019129 Points 261

Juste:

 wc -l < file_name
 

va faire le travail

55voto

James Broadhead Points 752
 wc $file | awk {'print $4" "$2" "$1'}
 

Ajustez si nécessaire pour votre mise en page.

Il est également préférable d'utiliser une logique positive (un fichier) plutôt qu'un négatif (pas un répertoire).

 [ -f $file ] && wc $file | awk {'print $4" "$2" "$1'}
 

53voto

casablanca Points 41814

Vous pouvez utiliser la commande cut pour obtenir uniquement le premier mot de la sortie de wc (qui correspond au nombre de lignes ou de mots):

 lines=`wc -l $f | cut -f1 -d' '`
words=`wc -w $f | cut -f1 -d' '`
 

11voto

Dennis Williamson Points 105818

Si vous rediriger le nom de fichier dans wc il omet le nom du fichier de sortie.

Bash:

read lines words characters <<< $(wc < filename)

ou

read lines words characters <<EOF
$(wc < filename)
EOF

Au lieu d'utiliser for d'itérer sur la sortie de l' ls, ce faire:

for f in *

qui ne fonctionnera que si il y a des noms de fichiers contenant des espaces.

Si vous ne pouvez pas utiliser d'expansion, vous devez tuyau en while read boucle:

find ... | while read -r f

ou de l'utilisation du processus de substitution

while read -r f
do
    something
done < <(find ...)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X