hoge.txt
hogefugapiyohogefugapiyo
hogehogehogehogehogehoge
Lorsque vous voulez connaître le nombre de "hoge" à partir d'un fichier comme celui-ci. (Au fait, 8)
J'ai essayé de connaître le nombre d'occurrences avec la commande intégrée, mais cela n'a pas fonctionné, j'ai donc écrit un script en Python. (Parce que grep peut ne pas être capable de gérer plusieurs occurrences sur une seule ligne)
match_count.py
# -*- coding: utf-8 -*-
#!/usr/bin/env python
import sys
import os.path
def clean_args(args):
if len(args) == 2:
search_word = args[1]
return (True, None, search_word)
if len(args) != 3:
print "[Usage] match_count.py $filename $search_word"
return (False, None, None)
target_file_path = args[1]
search_word = args[2]
if not os.path.exists(target_file_path):
print "[Error] File is not exist."
return (False, None, None)
return (True, target_file_path, search_word)
def count_words(filename, search_word):
if filename is not None:
# python 2.Parce que c'était 4, je ne peux pas utiliser avec
stream = open(filename, 'r')
counter = _count(stream, search_word)
stream.close()
return counter
else :
return _count(sys.stdin, search_word)
def _count(stream, search_word):
counter = 0
for line in stream:
counter += line.count(search_word)
return counter
def main():
args = sys.argv
(is_valid, filename, search_word) = clean_args(args)
if not is_valid:
sys.exit()
print count_words(filename, search_word)
if __name__ == '__main__':
main()
Créez ce fichier sous Linux et donnez-lui l'autorisation d'exécution.
$ ./match_count.py hoge.txt hoge
8
Vous pouvez obtenir le nombre qui correspond à hoge comme ça.
J'ai aussi essayé de soutenir les tuyaux
$ cat hoge.txt | ./match_count.py hoge
8
Vous pouvez l'utiliser même si vous le souhaitez. Je me demande si ce sera mieux si je chat plusieurs fichiers.
Recommended Posts