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