2013-05-15 130 views
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

使用sort

sort -n -k 6 inputfile 

-n進行數字排序,並-k講述通過一鍵排序。

編輯:對於就地分揀,使用-o選項:

+0

+1。替代形式:'sort -k 6n,6 inputfile'。其實它不會就地編輯。試試''perl -i',這樣做。 – TrueY

+1

另一種替代方法是:'sort -nk6 inputfile'。 – devnull

+0

@devnull謝謝你的回答。我想爲多個文件進行就地編輯。我怎樣才能改變你的代碼? – user2374784

0

我用一個散列結果,其中關鍵將是第6場加上遞增附加在末尾的每一行的計數器。這樣可以避免覆蓋重複的條目並保持穩定的順序。然後使用asorti()函數按第6個字段排序並打印原始數組的每一行。

{ 
     ++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] ] 
     } 
} 

運行它喜歡:的script.awk

內容

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 
+0

謝謝你的回答。你的代碼不適合我。 – user2374784

+0

@ user2374784:您將需要GNU版本。否則,我認爲'asorti()'不起作用。 – Birei