308 votos

¿Cómo puedo darle formato a mis grep de salida para mostrar los números de línea al final de la línea, y también el número de aciertos?

Estoy usando grep para que coincida con la cadena en un archivo. Aquí es un archivo de ejemplo:

example one,
example two null,
example three,
example four null,

grep -i null myfile.txt de devoluciones

example two null,
example four null,

¿Cómo puedo devolver igualado líneas junto con sus números de línea como esta:

  example two null, - Line number : 2
  example four null, - Line number : 4
  Total null count : 2

Yo sé-c devuelve el total de líneas coincidentes, pero yo no se cómo formatear correctamente para agregar total null count delante, y no sé cómo agregar los números de línea.

¿Qué puedo hacer?

490voto

dogbane Puntos 85749

-n devuelve el número de línea.

$ grep -in null myfile.txt

2:example two null,
4:example four null,

Se combinan con awk a imprimir el número de línea después del partido:

$ grep -in null myfile.txt | awk -F: '{print $2" - Line number : "$1}'

example two null, - Line number : 2
example four null, - Line number : 4

El uso de la sustitución de comandos para imprimir el total null count:

$ echo "Total null count :" $(grep -ic null myfile.txt)

Total null count : 2

48voto

Andy Lester Puntos 34051

Uso -n o --line-number.

Echa un vistazo man grep por muchas más opciones.

6voto

Zsolt Botykai Puntos 20615

O uso awk lugar:

awk '/null/ { counter++; printf("%s%s%i\n",$0, " - Line number: ", NR)} END {print "Total null count: " counter}' file

5voto

WakiMiko Puntos 378

uso grep -n -i null myfile.txt de la producción de la línea número delante de cada partido.

No creo que grep tiene un interruptor para imprimir el recuento del total de las líneas coincidentes, pero sólo puede tubo grep salida en el wc para lograr que:

grep -n -i null myfile.txt | wc -l

3voto

ghostdog74 Puntos 86060

grep encontrar las líneas de salida y los números de línea, pero no permite "programa" de otras cosas. Si desea incluir un texto arbitrario y hacer otras "programación", se puede utilizar awk,

$ awk '/null/{c++;print $0," - Line number: "NR}END{print "Total null count: "c}' file
example two null,  - Line number: 2
example four null,  - Line number: 4
Total null count: 2

O el sólo uso de la shell(bash/ksh)

c=0
while read -r line
do
  case "$line" in
   *null* )  (
    ((c++))
    echo "$line - Line number $c"
    ;;
  esac
done < "file"
echo "total count: $c"

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X