用python替代bash(awk命令)

时间:2016-03-04 10:35:36

标签: python bash

上下文:我对一个给我结果文件的程序运行计算。 在这些结果文件(扩展名.h5)上,我可以应用一个python代码(我无法更改此python代码),这样它就会给我一个方阵:

oneptdm.py resultfile.h5

举个例子:

1   2  3  4
5   6  7  8
9  10 11 12
13 14 15 16
points groups
1
2
3
...

在名为oneptdm.dat的文件中

我想要grep这个矩阵的对角线。通常我只使用bash:

awk '{ for (i=0; i<=NF; i++) if (NR >= 1 && NR == i) print i,$(i) }' oneptdm.dat > diagonal.dat

但是出于x的原因,我现在必须使用python。我怎样才能做到这一点 ? 我当然可以使用“subprocess”再次使用awk,但我想知道是否有另一种方法可以使用python脚本2.6版本。 结果应该是:

(line)  (diagonal element)
1       1
2       6
3       11
4       16

2 个答案:

答案 0 :(得分:2)

您可以尝试这样的事情:

with open('oneptdm.dat') as f:
    for i, l in enumerate(f):
        print '%d\t%s' % (i + 1, l.split()[i])

答案 1 :(得分:1)

这应该可以解决问题。它确实假设文件以方形矩阵开头,并且该假设用于限制从文件读取的行数。

with open('oneptdm.dat') as f:
    line = next(f).split()
    for i in range(len(line)):
        print('{0}\t{1}'.format(i+1, line[i]))
        try:
            line = next(f).split()
        except StopIteration:
            break

示例文件的输出:

1   1
2   6
3   11
4   16