Считайте количество строк, содержащих конкретную строку

У меня есть этот файл:

 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,

Я хочу сохранить количество строк, содержащих adaptec.mib, который равняется 21 здесь в этом примере.

Как это может быть сделано? Используя что-либо sed/grep/awk.

-2
задан 18 June 2015 в 13:52

4 ответа

grep имеет флаг-c, который позволяет сообщать о количестве раз, которым была найдена строка.

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

, Если Вы хотите быть немного более строгими в соответствии, можно использовать: grep -c "^adaptec\.mib," inputfile.txt

awk может сделать это также хотя немного более подробный.

$ awk  'BEGIN{count=0} /adaptec\.mib/ {count++;next} END {print count}' inputfile.txt
21
2
ответ дан 4 October 2019 в 03:04

Если Ваш файл отсортирован, как выше примера выше Вас может сделать grep:

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

вывод равняется 21.

пз: Это не будет допустимым решением, если файл не будет отсортирован

5
ответ дан 4 October 2019 в 03:04

Для сопоставления данных из CSVs у меня были хорошие результаты с библиотекой Python, названной csvkit прежде. Это довольно быстро и выводы к JSON (который был полезен для меня в то время).

sudo pip install csvkit
$ csvstat -c 1 -H --freq testfile 
{ "adaptec.mib": 21, "ashcroft_hsv_340.mib": 2 }
3
ответ дан 4 October 2019 в 03:04

perl путь:

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

Пример

$ 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
1
ответ дан 4 October 2019 в 03:04

Другие вопросы по тегам:

Похожие вопросы: