读取包含特定字符串的行数

读取包含特定字符串的行数

我有这个文件

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

我想要存储包含 adaptec.mib 的行数,在这个例子中是 21。

怎么做呢?使用 sed/grep/awk 即可。

答案1

如果你的文件按照上面的例子进行排序你可以这样做grep

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

输出为 21。

附言:如果文件未排序,这将不是有效的解决方案

答案2

对于整理 CSV 中的数据,我使用之前调用的 Python 库取得了不错的效果csvkit。它相当快,并输出为 JSON(这在当时对我很有用)。

sudo pip install csvkit
$ csvstat -c 1 -H --freq testfile 
{ "adaptec.mib": 21, "ashcroft_hsv_340.mib": 2 }

答案3

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

答案4

道路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

相关内容