grep várias linhas com contagem e cadeia exclusivas

0

Sample.csv

DSN1,abc,FAILURE,12,24,45
DSN1,def,FAILURE,12,78,65
DSN1,abc,FAILURE,12,24,45
DSN1,abc,FAILURE,12,24,45
DSN1,abc,FAILURE,12,24,45
DSN1,def,FAILURE,12,78,65
DSN1,abc,FAILURE,12,24,45

Eu preciso da contagem de falhas no exemplo acima.csv com resposta como

abc 5
def 2

mas eu não mencionei o abc / def no script. porque eu dei um exemplo de cenário no meu caso, muitas das seqüências de caracteres como abc estão lá, então eu preciso dessa seqüência e contar com falha.

por favor me sugira

Obrigado antecipadamente

    
por manu2711 23.01.2014 / 04:09

3 respostas

3

Uma solução simples é usar o seguinte canal:

<Sample.csv grep '^[^,]*,[^,]*,FAILURE' | cut -d, -f2 | sort | uniq -c
  • grep extrairá linhas com FAILURE na terceira coluna
  • cut extrairá a coluna (separador , número da coluna 2 )
  • sort ordenará a coluna extraída (os mesmos valores estarão próximos uns dos outros).
  • uniq removerá valores repetidos, a opção -c mostrará as contagens de cada valor único

Você também pode inserir outros filtros no cano conforme necessário. (por exemplo, grep no começo).

    
por 23.01.2014 / 04:21
1

O comentário de Ricky é como eu faria isso, mas se você quiser uma solução específica para o grep, você pode fazer o seguinte:

$ for i in {abc,def}; do echo -n "$i: "; grep -c $i input.txt; done;

isso produzirá o esperado:

abc:5
def:2

Atualizar

Se você não quiser incluir as chaves de busca no loop for, não vejo como fazê-lo simplesmente com apenas grep.

Você pode fazer isso com o awk.

awk 'BEGIN{FS=","}//{a[$2]++}END{for(x in a) print x,a[x]}' test.txt

Explicação:

FS="," -- set record seperator to comma

// -- match all lines

We create an associate array called 'a'

a[$2]++ -- each pattern matched we take 2nd column and increment count

END { .. } -- this block is run when done with all matching. we iterate over all elements printing key and count.

    
por 23.01.2014 / 05:36
-2

por favor encontre o mesmo:

awk < Sample.txt -F',' '{print $2}' | sort |uniq -c| grep "FAILURE"

Obrigado pelas suas respostas:)

    
por 24.01.2014 / 10:44

Tags