Lê o número de linhas contendo uma string específica

-2

Eu tenho este arquivo :

 adaptec.mib,sCSISmart1,.1.3.6.1.4.1.795.2.5.0.101,CRITICAL,
 adaptec.mib,sCSISmart2,.1.3.6.1.4.1.795.2.5.0.102,INFORMATIONAL,
 adaptec.mib,sCSISmart3,.1.3.6.1.4.1.795.2.5.0.107,INFORMATIONAL,
 adaptec.mib,sCSISmart4,.1.3.6.1.4.1.795.2.5.0.108,INFORMATIONAL,
 adaptec.mib,sCSISmart5,.1.3.6.1.4.1.795.2.5.0.109,INFORMATIONAL,
 adaptec.mib,sCSISmart6,.1.3.6.1.4.1.795.2.5.0.110,INFORMATIONAL,
 adaptec.mib,sCSISmart7,.1.3.6.1.4.1.795.2.5.0.111,INFORMATIONAL,
 adaptec.mib,sCSISmart8,.1.3.6.1.4.1.795.2.5.0.112,INFORMATIONAL,
 adaptec.mib,sCSISmart9,.1.3.6.1.4.1.795.2.5.0.113,INFORMATIONAL,
 adaptec.mib,sCSISmart10,.1.3.6.1.4.1.795.2.5.0.114,INFORMATIONAL,
 adaptec.mib,sCSISmart11,.1.3.6.1.4.1.795.2.5.0.115,CRITICAL,
 adaptec.mib,sCSISmart12,.1.3.6.1.4.1.795.2.5.0.116,INFORMATIONAL,
 adaptec.mib,sCSISmart13,.1.3.6.1.4.1.795.2.5.0.117,INFORMATIONAL,
 adaptec.mib,sCSISmart14,.1.3.6.1.4.1.795.2.5.0.118,INFORMATIONAL,
 adaptec.mib,sCSISmart15,.1.3.6.1.4.1.795.2.5.0.119,CRITICAL,
 adaptec.mib,sCSISmart16,.1.3.6.1.4.1.795.2.5.0.120,CRITICAL,
 adaptec.mib,sCSISmart17,.1.3.6.1.4.1.795.2.5.0.121,INFORMATIONAL,
 adaptec.mib,sCSISmart18,.1.3.6.1.4.1.795.2.5.0.122,INFORMATIONAL,
 adaptec.mib,sCSISmart19,.1.3.6.1.4.1.795.2.5.0.123,CRITICAL,
 adaptec.mib,sCSISmart20,.1.3.6.1.4.1.795.2.5.0.124,INFORMATIONAL,
 adaptec.mib,sCSISmart21,.1.3.6.1.4.1.795.2.5.0.125,INFORMATIONAL,
 ashcroft_hsv_340.mib,sCellEventTrap_02_00,.1.3.6.1.4.1.232.13600512,INFORMATIONAL,
 ashcroft_hsv_340.mib,sCellEventTrap_03_21,.1.3.6.1.4.1.232.13600801,MINOR,

Eu quero armazenar o número de linhas contendo adaptec.mib que é 21 aqui neste exemplo.

Como isso pode ser feito? Usando qualquer coisa sed / grep / awk.

    
por SamFlynn 18.06.2015 / 08:55

4 respostas

2

grep tem um sinalizador -c que permite informar o número de vezes que uma string foi encontrada.

$ grep -c "adaptec\.mib" inputfile.txt                                          
21

Se você quiser ser um pouco mais rigoroso na correspondência, use: grep -c "^adaptec\.mib," inputfile.txt

awk pode fazer isso também, embora um pouco mais detalhado.

$ awk  'BEGIN{count=0} /adaptec\.mib/ {count++;next} END {print count}' inputfile.txt
21
    
por Sergiy Kolodyazhnyy 18.06.2015 / 09:26
5

Se o seu arquivo estiver classificado como acima no exemplo acima, você pode fazer grep :

grep "adaptec\.mib" filename | wc -l

a saída é 21.

PS: Esta não será uma solução válida se o arquivo não estiver classificado

    
por Maythux 18.06.2015 / 09:03
3

Para agrupar dados de CSVs, obtive bons resultados com uma biblioteca Python chamada csvkit before. É razoavelmente rápido e resulta em JSON (o que foi útil para mim na época).

sudo pip install csvkit
$ csvstat -c 1 -H --freq testfile 
{ "adaptec.mib": 21, "ashcroft_hsv_340.mib": 2 }
    
por Oli 18.06.2015 / 09:16
1

A maneira perl :

perl -ne '/^(?!.*adaptec\.mib)/||print' foo | wc -l

Exemplo

$ cat foo
 adaptec.mib,sCSISmart1,.1.3.6.1.4.1.795.2.5.0.101,CRITICAL,
 adaptec.mib,sCSISmart2,.1.3.6.1.4.1.795.2.5.0.102,INFORMATIONAL,
 adaptec.mib,sCSISmart3,.1.3.6.1.4.1.795.2.5.0.107,INFORMATIONAL,
 adaptec.mib,sCSISmart4,.1.3.6.1.4.1.795.2.5.0.108,INFORMATIONAL,
 adaptec.mib,sCSISmart5,.1.3.6.1.4.1.795.2.5.0.109,INFORMATIONAL,
 adaptec.mib,sCSISmart6,.1.3.6.1.4.1.795.2.5.0.110,INFORMATIONAL,
 adaptec.mib,sCSISmart7,.1.3.6.1.4.1.795.2.5.0.111,INFORMATIONAL,
 adaptec.mib,sCSISmart8,.1.3.6.1.4.1.795.2.5.0.112,INFORMATIONAL,
 adaptec.mib,sCSISmart9,.1.3.6.1.4.1.795.2.5.0.113,INFORMATIONAL,
 adaptec.mib,sCSISmart10,.1.3.6.1.4.1.795.2.5.0.114,INFORMATIONAL,
 adaptec.mib,sCSISmart11,.1.3.6.1.4.1.795.2.5.0.115,CRITICAL,
 adaptec.mib,sCSISmart12,.1.3.6.1.4.1.795.2.5.0.116,INFORMATIONAL,
 adaptec.mib,sCSISmart13,.1.3.6.1.4.1.795.2.5.0.117,INFORMATIONAL,
 adaptec.mib,sCSISmart14,.1.3.6.1.4.1.795.2.5.0.118,INFORMATIONAL,
 adaptec.mib,sCSISmart15,.1.3.6.1.4.1.795.2.5.0.119,CRITICAL,
 adaptec.mib,sCSISmart16,.1.3.6.1.4.1.795.2.5.0.120,CRITICAL,
 adaptec.mib,sCSISmart17,.1.3.6.1.4.1.795.2.5.0.121,INFORMATIONAL,
 adaptec.mib,sCSISmart18,.1.3.6.1.4.1.795.2.5.0.122,INFORMATIONAL,
 adaptec.mib,sCSISmart19,.1.3.6.1.4.1.795.2.5.0.123,CRITICAL,
 adaptec.mib,sCSISmart20,.1.3.6.1.4.1.795.2.5.0.124,INFORMATIONAL,
 adaptec.mib,sCSISmart21,.1.3.6.1.4.1.795.2.5.0.125,INFORMATIONAL,
 ashcroft_hsv_340.mib,sCellEventTrap_02_00,.1.3.6.1.4.1.232.13600512,INFORMATIONAL,
 ashcroft_hsv_340.mib,sCellEventTrap_03_21,.1.3.6.1.4.1.232.13600801,MINOR,

$ perl -ne '/^(?!.*adaptec\.mib)/||print' foo | wc -l
21
    
por A.B. 18.06.2015 / 13:03