Como contar o número de palavras e imprimir as linhas que correspondem exatamente a um determinado padrão?

2

Eu quero contar o número de palavras e imprimir as linhas do padrão correspondente que correspondem exatamente ao seguinte padrão:

abc-ERROR:

O arquivo de entrada contém:

# abc-ERROR: xyxxkkfgfr
# def-Error: aaaaaa
# abc-ERROR.cpp

A saída deve ser:

 1   (count)
 # abc-ERROR: xyxxkkfgfr   (line)
    
por Bhushan J 17.04.2013 / 11:09

3 respostas

2

Você pode usar grep para obter as linhas e grep -c para obter o número de linhas. Se você não gostar de executar grep duas vezes, poderá usar tee e a substituição do processo (o seguinte é a sintaxe bash):

grep abc-ERROR: input.txt | tee >( wc -l )
    
por 17.04.2013 / 11:49
0

Como isso é:

$ cat file
# abc-ERROR: xyxxkkfgfr
# abc-ERROR: xyxxkkfgfr
# abc-ERROR: xyxxkkfgfr
# def-Error: aaaaaa
# abc-ERROR.cp
# abc-ERROR: asdgsdgaaf
# abc-ERROR: asdgsdgaaf
# abc-ERROR: tttttttttq

$ awk '/abc-ERROR: /{a[$0]++}END{for(k in a) printf "%d\t(count)\n%s\t(line)\n",a[k],k}' file
1   (count)
# abc-ERROR: tttttttttq (line)
2   (count)
# abc-ERROR: asdgsdgaaf (line)
3   (count)
# abc-ERROR: xyxxkkfgfr (line)
    
por 18.04.2013 / 16:07
0

Existem 2 maneiras que recomendo fazer isso.

1) Coloque uma função em seu bashrc / bash_profile e crie um alias para chamar essa função (isso fará uso global disso)

2) crie um arquivo de script de shell e também crie um alias desse arquivo.

#!/bin/bash
function matchString(){
REGEX="$1"
FILE="$2"
RESULTS=$(grep -n "$REGEX" $FILE | awk -F ":" '{print $2 "\tLine: " $1}')
COUNT=$(echo $RESULTS | wc -l)
echo "Count: $COUNT"
echo $RESULTS
}
matchString $1 $2

Chamar este arquivo (ou seja, bash matchString.sh "abc-ERROR:" test.txt) baseado no seu arquivo de texto será exibido assim:

Contagem: 1

Linha abc-ERROR: 1

- Esta função toma o primeiro argumento como o padrão regex (assim, ele pode ser reutilizado em qualquer cenário similar) e procura esse padrão no arquivo que é chamado pelo segundo argumento.

A primeira linha de saída é a contagem total de todas as linhas correspondentes, e cada linha após é a correspondência seguida por uma guia e um número de linha dessa correspondência.

    
por 29.04.2016 / 14:42