ある解析値の時間変化を出して、それぞれをpasteコマンドやjoinコマンドを使ってつなげることがよくあります。しかし、その時間スケールがそれぞれの結果で合わないとき、たとえば、一方は1000行までしかないのにもう一方は2000行まである時があります。そこで1001~2000分を削ってしまいたくないときはjoinコマンドの-aを使えば損失なく結合できますね。だた、そうやっていくつかの列を結合しても、graceでプロットしようとすると読み込んでくれません。graceを使う場合は各列の行数が同じでないといけないようです。(言い換えると、各行の列数が同じでないといけないということ。)
そこで、空白を0で埋めるというpythonスクリプトを書きました。
例えば、
1 32 2 16 3 8 4 4 5 2
1 15 2 10 3 5
この2つのデータをjoin -a 1 data1.txt data2.txtした後に、穴が空いた所を0で埋めてくれます。
1 | 32 | 15 |
2 | 16 | 10 |
3 | 8 | 15 |
4 | 4 | 0 |
5 | 2 | 0 |
こんな感じ。
実際にはこういう風に使います。
join -a 1 [data1] [data1] > [input] python fillzero.py [input] [maxcolumn]
#!/usr/bin/bash # -*- coding:utf-8 -*- import sys import os if __name__ == "__main__": argvs = sys.argv argvc = len(argvs) if argvc != 3: print "python fillzero.py [input] [maxcolumn]" exit() else: if not(os.path.exists(argvs[1])): print "file NOT exists" else: filename = argvs[1] maxcol = int(argvs[2]) #print "file: " + filename f = open(filename, 'r') for line in f: if line.strip() != "": if line[0] != "@" and line[0] != "#": col = line.split() if len(col) > maxcol: print "Over column (" + str(len(col)) + " > " + str(maxcol) + " )" print "string: " + line exit() elif len(col) < maxcol: print line[:-1], for i in range(maxcol - len(col)): print " 0", print "" else: print line, else: # comment line print line, f.close()