scripts script resueltos programas pasar parametros operaciones manejo ejercicios ejemplos cadenas aritmeticas bash wc

script - obtener solo el número entero de wc en bash



scripts linux ejercicios resueltos (15)

"Básicamente, quiero escribir los números de línea y los recuentos de palabras en la pantalla después del nombre del archivo".

answer=(`wc $f`) echo -e"${answer[3]} lines: ${answer[0]} words: ${answer[1]} bytes: ${answer[2]}"

Salidas: líneas myfile.txt: 10 palabras: 20 bytes: 120

¿Hay alguna forma de obtener el entero que devuelve wc en bash?

Básicamente, quiero escribir los números de línea y los recuentos de palabras en la pantalla después del nombre del archivo.

output: filename linecount wordcount es lo que tengo hasta ahora:

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


¿Qué tal con sed ?

wc -l /path/to/file.ext | sed ''s/ */([0-9]* /).*//1/''


A veces, los resultados de wc en diferentes formatos en diferentes plataformas. Por ejemplo:

En OS X:

$ echo aa | wc -l 1

En Centos:

$ echo aa | wc -l 1

Entonces, usar solo corte no puede recuperar el número. En su lugar, intente tr para eliminar caracteres espaciales:

$ echo aa | wc -l | tr -d '' ''


La respuesta más simple de todas:

wc < filename


Las respuestas aceptadas / populares no funcionan en OSX.

Cualquiera de los siguientes debe ser portable en bsd y linux.

wc -l < $f | tr -d '' ''

O

wc -l $f | tr -s '' '' | cut -d '' '' -f 2

O

wc -l $f | awk ''{print $1}''


Otra forma, similar a lo que @BananaNeil publicó:

$ cat myfile.txt | wc -l


Prueba esto para obtener un resultado numérico:
nlines = $ (wc -l <$ myfile)


Prueba esto:

wc `ls` | awk ''{ LINE += $1; WC += $2 } END { print "lines: " LINE " words: " WC }''

Crea un conteo de líneas y recuentos de palabras (LINE y WC) y los aumenta con los valores extraídos de wc (utilizando $ 1 para el valor de la primera columna y $ 2 para el segundo) y finalmente imprime los resultados.


Puede utilizar el comando de cut para obtener solo la primera palabra de la salida de wc (que es el recuento de líneas o palabras):

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


Sólo:

wc -l < file_name

hará el trabajo


Si el archivo es pequeño, puede permitirse llamar al wc dos veces, y usar algo como lo siguiente, lo que evita que ingrese en un proceso adicional:

lines=$((`wc -l $f`)) words=$((`wc -w $f`))

El $((...)) es la Expansión Aritmética de bash. Elimina cualquier espacio en blanco de la salida de wc en este caso.

Esta solución tiene más sentido si necesita el conteo de líneas o la palabra.


Si redirige el nombre del archivo a wc , omite el nombre del archivo en la salida.

Intento:

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

o

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

En lugar de usar for para iterar sobre la salida de ls , haga esto:

for f in *

que funcionará si hay nombres de archivos que incluyen espacios.

Si no puede usar globbing, debe canalizar en un ciclo while read :

find ... | while read -r f

o use la sustitución del proceso

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


files=`ls` echo "$files" | wc -l | perl -pe "s#^/s+##"


typeset -i a=$(wc -l fileName.dat | xargs echo | cut -d'' '' -f1)


wc $file | awk {''print "$4" "$2" "$1"''}

Ajústelo según sea necesario para su diseño.

También es mejor utilizar una lógica positiva ("es un archivo") que una negativa ("no es un directorio")

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