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増えている。