行を間引いて表示

分毎のログを大雑把に見るため行を間引いて(スキップして)表示したい。

pythonで書いた。1

#!/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

参考


  1. ログのファイルサイズが不明なので、ファイル全体を読むのは避けたい。なのでfor line in f:で行単位で読むのがポイント。