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
同じ行に複数「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
