多个文件每个文件的同样的第一列的情况下, 第三列相加,没有的就补零
/tmp$ cat a aa bb 1 dd bb 2 aa bb 3 ee xx 4 /tmp$ cat b bb cc 1 aa bbb 2 cc dd 3 dd ee 4 /tmp$ cat c kk mm 3 dd ee 2 aa dd 1 bb ee 5
这个一般awk折腾的多点。 python代码如下:
#!/usr/bin/env python import sys import fileinput fDict = {} for i in fileinput.input(sys.argv[1:]): tmp = i.split() fDict.setdefault(tmp[0], [0]*len(sys.argv[1:])) fDict[tmp[0]][sys.argv[1:].index(fileinput.filename())] += int(tmp[2]) for i in fDict: print i," ".join([ str(j) for j in fDict[i] ])
结果:
/tmp$ ./f.py a b c aa 4 2 1 bb 0 1 5 ee 4 0 0 dd 2 4 2 kk 0 0 3 cc 0 3 0
之前以为 fileinput.fileno 就是正在处理文件的index,结果是:
fileinput.fileno() Return the integer “file descriptor” for the current file. When no file is opened (before the first line and between files), returns -1.
好吧,这下记住了。
原文地址:http://abian.blog.51cto.com/751059/1790436