Linuxコンソール上でファイル内の特定のキーワードの数を数える
Pocket

Linuxコンソール上で特定のキーワード数を数える必要があったので一応備忘として残しておく。
(単純に、grepとwcで数えるだけなんだけど。。。)

単純な話、以下のようなファイルから、キーワード「abc」を数えたいとする。

●/tmp/test4.txt

[root@BS-PUB-CENT7-01 ~]# cat /tmp/test4.txt
bbc cca ccb cca cbc aaa cab cca abc bcc
aaa cca bbb abb cbb abc bcc bab cbc aaa
aaa cbc ccc bba bba abc cbc baa cbc cca
abc caa aba aba aac bca bcc aba bca baa
abb ccc cab cac bba ccb aba aba bca abc
aac bbc bbc bab bcc aba abc cbb cac abc
cba bab ccc aba aaa bcc bab ccb cac abc
bbb bbb cab abc aaa abc bbc bcc cbc cbc
bba abb cca bba aba abc cac acb ccb acc
cbc aba baa bba acc aac abb cca abc acb
abc bbc cab bbc cbb cca acc cca ccc aca
baa bbb cba aac abc cca aac acc bcb cbb
cbc acc bcc aba abc bab abc bac ccb baa
bba aac cab bab aaa abc aba cab bcb bcc
abc bba ccb bcc abb aba baa cac aac bbc
bcb abb bbb bba abc bcc aab bbb cac bca
bbb abb cab cab aab caa cac bbb aca abc
abb cbb aba cac bac aca bab bac abc abb
Sponsored Links

同じ行に複数「abc」があるので、「grep -c」では数えられないなぁ、という状態。
なので、一度「grep -o」で「abc」ごとに行を分けてしまって、それをwcで数えればいい。

grep -o 'キーワード' /ファイルPATH | wc -l
[root@BS-PUB-CENT7-01 ~]# cat /tmp/test4.txt
bbc cca ccb cca cbc aaa cab cca abc bcc
aaa cca bbb abb cbb abc bcc bab cbc aaa
aaa cbc ccc bba bba abc cbc baa cbc cca
abc caa aba aba aac bca bcc aba bca baa
abb ccc cab cac bba ccb aba aba bca abc
aac bbc bbc bab bcc aba abc cbb cac abc
cba bab ccc aba aaa bcc bab ccb cac abc
bbb bbb cab abc aaa abc bbc bcc cbc cbc
bba abb cca bba aba abc cac acb ccb acc
cbc aba baa bba acc aac abb cca abc acb
abc bbc cab bbc cbb cca acc cca ccc aca
baa bbb cba aac abc cca aac acc bcb cbb
cbc acc bcc aba abc bab abc bac ccb baa
bba aac cab bab aaa abc aba cab bcb bcc
abc bba ccb bcc abb aba baa cac aac bbc
bcb abb bbb bba abc bcc aab bbb cac bca
bbb abb cab cab aab caa cac bbb aca abc
abb cbb aba cac bac aca bab bac abc abb
[root@BS-PUB-CENT7-01 ~]# grep -o abc /tmp/test3.txt
abc
abc
abc
abc
abc
abc
abc
abc
abc
abc
abc
abc
abc
abc
abc
abc
abc
abc
abc
abc
abc
[root@BS-PUB-CENT7-01 ~]# grep -o abc /tmp/test3.txt | wc -l
21

 

なお、連続した文字列(例えば、「abc a」とか)が改行をまたいで存在していて、それをカウントしたい場合は一度改行を置換して、同様の処理を行えば良い。

[root@BS-PUB-CENT7-01 ~]# cat /tmp/test4.txt | tr -d '\n'
bbc cca ccb cca cbc aaa cab cca abc bccaaa cca bbb abb cbb abc bcc bab cbc aaaaaa cbc ccc bba bba abc cbc baa cbc ccaabc caa aba aba aac bca bcc aba bca baaabb ccc cab cac bba ccb aba aba bca abcaac bbc bbc bab bcc aba abc cbb cac abccba bab ccc aba aaa bcc bab ccb cac abcbbb bbb cab abc aaa abc bbc bcc cbc cbcbba abb cca bba aba abc cac acb ccb acccbc aba baa bba acc aac abb cca abc acbabc bbc cab bbc cbb cca acc cca ccc acabaa bbb cba aac abc cca aac acc bcb cbbcbc acc bcc aba abc bab abc bac ccb baabba aac cab bab aaa abc aba cab bcb bccabc bba ccb bcc abb aba baa cac aac bbcbcb abb bbb bba abc bcc aab bbb cac bcabbb abb cab cab aab caa cac bbb aca abcabb cbb aba cac bac aca bab bac abc abb
[root@BS-PUB-CENT7-01 ~]# cat /tmp/test4.txt | tr -d '\n' | grep -o 'abc a'
abc a
abc a
abc a
abc a
[root@BS-PUB-CENT7-01 ~]# cat /tmp/test4.txt | tr -d '\n' | grep -o 'abc a' | wc -l
4

 

Pocket

Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。