0

200 個の pdb ファイルを含むフォルダーがあります。6 列目に基づいて、PDB ファイルの原子行を昇順に並べたいと思います。フォルダー内の各 pdb ファイルをインプレース編集したいと考えています。あなたの助けをいただければ幸いです。

ATOM     81  N   ASN A 248      38.791 -16.708  12.507  1.00 52.04           N 
ATOM     82  CA  ASN A 248      39.443 -17.018  11.206  1.00 54.49           C 
ATOM    422  C   SER A 205      70.124 -29.955   8.226  1.00 55.81           C 
ATOM    423  O   SER A 205      70.901 -29.008   8.438  1.00 46.60           O 
ATOM    303  N   MET A 231      61.031 -38.086  -3.054  1.00 52.32           N 
ATOM    304  CA  MET A 231      60.580 -39.074  -4.047  1.00 64.11           C
ATOM    392  C   GLU B  65      23.248  10.071  -7.321  1.00 48.26           C  
ATOM    393  O   GLU B  65      24.465  10.200  -7.158  1.00 46.53           O
ATOM    394  O   GLU B  65      24.465  10.200  -7.158  1.00 46.53           O

望ましい出力

ATOM    392  C   GLU B  65      23.248  10.071  -7.321  1.00 48.26           C
ATOM    393  O   GLU B  65      24.465  10.200  -7.158  1.00 46.53           O
ATOM    394  O   GLU B  65      24.465  10.200  -7.158  1.00 46.53           O 
ATOM    422  C   SER A 205      70.124 -29.955   8.226  1.00 55.81           C  
ATOM    423  O   SER A 205      70.901 -29.008   8.438  1.00 46.60           O 
ATOM    303  N   MET A 231      61.031 -38.086  -3.054  1.00 52.32           N
ATOM    304  CA  MET A 231      60.580 -39.074  -4.047  1.00 64.11           C
ATOM     81  N   ASN A 248      38.791 -16.708  12.507  1.00 52.04           N
ATOM     82  CA  ASN A 248      39.443 -17.018  11.206  1.00 54.49           C  
4

2 に答える 2

0

キーが6番目のフィールドと、最後に追加された各行をインクリメントするカウンターになるハッシュを使用します。これにより、重複したエントリの上書きが回避され、安定した順序が維持されます。次に、asorti()関数を使用してその 6 番目のフィールドで並べ替え、元の配列の各行を出力します。

の内容script.awk:

{
        ++n
        data[ $6 _ n ] = $0;
}

END {
        asorti( data, mod_data, "@ind_num_asc" )
        l = length( data )
        for ( i = 1; i <= l; i++ ) {
                print data[ mod_data[i] ]
        }
}

次のように実行します。

awk -f script.awk infile

それは以下をもたらします:

ATOM    392  C   GLU B  65      23.248  10.071  -7.321  1.00 48.26           C  
ATOM    393  O   GLU B  65      24.465  10.200  -7.158  1.00 46.53           O
ATOM    394  O   GLU B  65      24.465  10.200  -7.158  1.00 46.53           O
ATOM    422  C   SER A 205      70.124 -29.955   8.226  1.00 55.81           C 
ATOM    423  O   SER A 205      70.901 -29.008   8.438  1.00 46.60           O 
ATOM    303  N   MET A 231      61.031 -38.086  -3.054  1.00 52.32           N 
ATOM    304  CA  MET A 231      60.580 -39.074  -4.047  1.00 64.11           C
ATOM     81  N   ASN A 248      38.791 -16.708  12.507  1.00 52.04           N 
ATOM     82  CA  ASN A 248      39.443 -17.018  11.206  1.00 54.49           C
于 2013-05-15T08:28:18.097 に答える