簡體   English   中英

用python替代bash(awk命令)

[英]Alternative to bash (awk command) with python

上下文:我在提供結果文件的程序上運行計算。 在這些結果文件(擴展名為.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來做。 我怎樣才能做到這一點 ? 我當然可以再次使用“子進程”再次使用awk,但我想知道是否存在使用2.6版python腳本進行此操作的替代方法。 結果應為:

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

您可以嘗試如下操作:

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

這應該可以解決問題。 它確實假設文件以方陣開頭,並且該假設用於限制從文件讀取的行數。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM