ikautak.log

C/C++, Python, CUDA, Android, Linux kernel, Network, etc.

標準入力をsplitして、行と列を変換するpythonスクリプト

例えば、以下のような9行を3行ずつsplitして、

f:id:trisection:20160628232037p:plain

このように整形したいとき、bashで一度にうまくやる方法がわからなかったので自作。

f:id:trisection:20160721230201p:plain

split-transpose.py

#!/usr/bin/env python

import sys

def split_transpose(n):
    line = ''
    count = 0

    for l in iter(sys.stdin.readline, ''):
        line += l.rstrip() + '\t'
        count += 1

        if count == n:
            print(line)
            line = ''
            count = 0

    if count != 0:
        print(line)


if __name__ == '__main__':
    if len(sys.argv) > 1:
        split_transpose(int(sys.argv[1]))

デリミタはとりあえずtab固定。

seq 12 を4行ごとにsplit-transposeした結果

$ seq 12 | ./split-transpose.py 4
1   2   3   4   
5   6   7   8   
9   10  11  12