0

ディレクトリにあるPDB(テキスト)ファイルがあります。各 PDB ファイルからサブユニットの数を出力したいと思います。

  1. で始まる pdb ファイル内のすべての行を読み取ります。ATOM
  2. 行の 5 列目には、、、などが含まれATOMます。ABCD
  3. Aサブユニットの数だけが含まれている場合は 1 です。とが含まAれてBいる場合は、サブユニットAの数は 2 です。BC

1kg2.pdb ファイル

ATOM   1363  N   ASN A 258      82.149 -23.468   9.733  1.00 57.80           N  
ATOM   1364  CA  ASN A 258      82.494 -22.084   9.356  1.00 62.98           C  
ATOM   1395  C   MET B 196      34.816 -51.911  11.750  1.00 49.79           C  
ATOM   1396  O   MET B 196      35.611 -52.439  10.963  1.00 47.65           O  

1uz3.pdb ファイル

ATOM   1384  O   ARG A 260      80.505 -20.450  15.420  1.00 22.10           O 
ATOM   1385  CB  ARG A 260      78.980 -18.077  15.207  1.00 36.88           C 
ATOM   1399  SD  MET B 196      34.003 -52.544  16.664  1.00 57.16           S 
ATOM   1401  N   ASP C 197      34.781 -50.611  12.007  1.00 44.30           N  

2b69.pdb ファイル

ATOM   1393  N   MET B 196      33.300 -54.017  12.033  1.00 46.46           N  
ATOM   1394  CA  MET B 196      33.782 -52.714  12.566  1.00 49.99           C  

希望の出力

pdb_id   subunits

 1kg2      2
 1uz3      3
 2b69      1

awk、python、またはBiopythonでこれを行うにはどうすればよいですか?

4

2 に答える 2

2

配列を使用して、表示されたすべての値を 5 番目の列に記録できます。

$ gawk '/^ATOM/ {seen[$5] = 1} END {print length(seen)}' 1kg2.pdb
2

編集: gawk 4.x を使用ENDFILEすると、必要な出力を生成するために使用できます。

BEGIN {
  print "pdb_id\t\tsubunits"
  print
}

/^ATOM/ {
  seen[$5] = 1
}

ENDFILE {
  print FILENAME, "\t", length(seen)
  delete seen
}

結果:

$ gawk -f pdb.awk 1kg2.pdb 1uz3.pdb 2b69.pdb
pdb_id          subunits

1kg2.pdb         2
1uz3.pdb         3
2b69.pdb         1
于 2012-09-15T15:04:40.750 に答える
0

辞書は、一意の出現をカウントする 1 つの方法です。次の例では、意味のない値 (0) を各サブユニットに割り当てています。これは、重要なのは一意のサブユニット (辞書キー) の数だけだからです。

import os

for fn in os.listdir():
    if ".pdb" in fn:
        sub = {}
        with open(fn, 'r') as f:
            for line in f:
                c = line.split()
                if len(c) > 5 and c[0] == "ATOM":
                    sub[c[4]] = 0
        print(fn, len(sub.keys()))

(まったく新しいユーザーには、 http://whathaveyoutried.com/へのポインターと共に回答する価値があります。その後の質問には、ユーザーが実際に問題を解決しようとしたという証拠を含める必要があります。)

于 2012-09-15T15:42:18.770 に答える