Como posso formatar minha saída grep para mostrar os números de linha no final da linha e também a contagem de ocorrências?


378

Estou usando o grep para corresponder a seqüência de caracteres em um arquivo. Aqui está um arquivo de exemplo:

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

grep -i null myfile.txt retorna

example two null,
example four null,

Como posso retornar as linhas correspondentes, juntamente com seus números de linha, da seguinte maneira:

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

Eu sei que -c retorna o total de linhas correspondentes, mas não sei como formatá-lo corretamente para adicionar total null countna frente e não sei como adicionar os números de linha.

O que eu posso fazer?

Respostas:


600

-n retorna o número da linha.

-ié para ignorar caso. Só deve ser usado se a correspondência de caso não for necessária

$ grep -in null myfile.txt

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

Combine com awkpara imprimir o número da linha após a partida:

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

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

Use a substituição de comando para imprimir a contagem total de nulos:

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

Total null count : 2

posso formatar isso adicionando números de linha depois e não antes com:?
Londres

sua solução parece boa, mas com erroawk95: syntax error at source line context is >>> ' <<< missing } awk95: bailing out at source line 1
Londres

desculpe, mudei para o linux agora está funcionando :) era a versão do windows não tão boa #
London

11
... os cavaleiros que dizem -niisso é como você se lembrar este truque
santiago Arizti

59

Use -nou --line-number.

Confira man grepmais opções.


3
O novo usuário do Linux está com preguiça de ler a página de manual. Mas se eles usam linux suficiente, eles serão usados para isso :) É super útil :)
Dzung Nguyen

19
Nem sempre preguiçoso, (mas às vezes), geralmente é que um novo usuário do Linux tem problemas para entender uma página de manual. (Eles podem parecer enigmática)
TecBrat

Às vezes, a página de manual pode levar muitas páginas. E isso é difícil de ler todos eles
Eugen Konkov

7

usar grep -n -i null myfile.txt para exibir o número da linha antes de cada partida.

Eu não acho que o grep tenha uma opção para imprimir a contagem de linhas totais correspondidas, mas você pode simplesmente canalizar a saída do grep no wc para fazer isso:

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

3
-c irá imprimir as linhas totais combinados
dpatchery

Você está certo. Infelizmente, também suprime a saída normal.
jhenninger

7

Ou use awk:

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

4

grepencontre as linhas e produza os números das linhas, mas não permite "programar" outras coisas. Se você deseja incluir texto arbitrário e fazer outras "programações", pode usar o 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

Ou apenas usando o 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"

3

ou em perl (para completar ...):

perl -npe 'chomp; /null/ and print "$_ - Line number : $.\n" and $i++;$_="";END{print "Total null count : $i\n"}'


1

Só pensei em algo que poderia ajudá-lo no futuro. Para pesquisar vários números de sequência e de linha de saída e navegar pela saída, digite:

egrep -ne 'null|three'

mostrará:

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

egrep -ne 'null|three' | less

exibirá a saída em menos sessão

HTH Jun

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.