行を間引いて表示
分毎のログを大雑把に見るため行を間引いて(スキップして)表示したい。
#!/usr/bin/env python3 import argparse def setup_parser(): p = argparse.ArgumentParser() p.add_argument('infile') p.add_argument('skip', type=int) return p def lineskip(infile:str, skip:int): # 行始めを1とし、指定数の余剰が1の時に表示する n = 1 with open(infile) as f: for line in f: if (n % skip) == 1: print(line, end='') n += 1 if __name__ == '__main__': parser = setup_parser() args = parser.parse_args() lineskip(args.infile, args.skip)
こうする。
% chmod +x lineskip.py
% ./lineskip.py every_minute.csv 60 // 1時間毎に
2023-08-01T10:00:02, ....
2023-08-01T11:00:03, ....
2023-08-01T12:00:02, ....
ちょっと待って欲しい。
こんな汎用的なこと、もっと簡単にできない訳がない。 調べたらawkで1行だった。うーんスゴい。
% awk 'NR%60==1' every_minute.csv
参考
-
ログのファイルサイズが不明なので、ファイル全体を読むのは避けたい。なので
for line in f:
で行単位で読むのがポイント。↩