Skip to main content

ログ取得ツール (移転先予定地)

2つのファイルに記述されている数値の差を表示する

dfの値の変化だけを見たい場合とか、もっと複雑な書式のテキストデータで数の変化だけを見たい場合、というものが存在する。

試しに書いてみた。

[pyg language=“python”] #! /usr/bin/python

encoding: UTF-8

import os,sys import difflib import re

def isnum(s): if len(s)==0: return False if s[0] in ("+", “-”): return s[1:].isdigit() return s.isdigit()

def main(args): p=re.compile("([+-]?[0-9]+)") f1=p.split(file(args[0]).read()) f2=p.split(file(args[1]).read()) diff=difflib.ndiff(f1, f2, charjunk=lambda f: f.isspace()) d=filter(lambda f: f[0] in " +-", diff) nm,np=[],[] for i in d: hdr,s=i[0],i[2:] if hdr=="-" and isnum(s): nm.append(int(s)) elif hdr=="+" and isnum(s): np.append(int(s)) else: for im, ip in zip(nm, np): sys.stdout.write(str(ip-im).rjust(len(s))) if i[2:].isdigit(): sys.stdout.write(“0”.rjust(len(s))) else: sys.stdout.write(s) nm,np=[],[] for im, ip in zip(nm, np): sys.stdout.write(str(ip-im))

if __name__=="__main__": main(sys.argv[1:]) [/pyg]

例えば、以下のように使う。

zsh# python numdiff.py =(df) =(sleep 5; df)
Filesystem           0K-ブロック    使用   使用可 使用% マウント位置
/dev/vda0                    0    4   -4   0% /
tmpfs                        0         0         0   0% /dev/shm

5秒で/は4KB増えている。