Прочитать количество строк, содержащих определенную строку

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

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.

1
задан 18 June 2015 в 13:52

3 ответа

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

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

вывод равен 21.

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

5
ответ дан 23 May 2018 в 19:43
  • 1
    Он работает отлично. Могу ли я спросить, что делает `\` в "adaptec\.mib"? потому что я планировал взять имя adaptec.mib в качестве входа в эту команду. Пример echo "Enter name of the file" read fname grep "$fname" filename | wc -l – SamFlynn 18 June 2015 в 10:09
  • 2
    & Quot; \ " символ ускользает от & quot ;. " так что он включен в строку. – Dɑvïd 18 June 2015 в 10:12
  • 3
    если вы не включили " \ " то любое имя adaptecXmib будет включено. Например, adaptecAmib или .. .so использовать \, чтобы избежать расширения . и рассматриваться как ., а не символ расширения – Maythux 18 June 2015 в 10:16
  • 4
    Он будет работать нормально, даже если файл не отсортирован. – kasperd 18 June 2015 в 13:16
  • 5
    @kasperd Я не просто говорю об этом вопросе! Это уже пятый раз. Он сделал то же самое действие в 4 раза раньше – Maythux 18 June 2015 в 13:24

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

sudo pip install csvkit
$ csvstat -c 1 -H --freq testfile 
{ "adaptec.mib": 21, "ashcroft_hsv_340.mib": 2 }
3
ответ дан 23 May 2018 в 19:43

Способ 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
ответ дан 23 May 2018 в 19:43

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

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