2017-07-17 81 views
0

我有xxx.pdb文件作爲:編輯後保持PDB文件格式。

ATOM 1910 CB SER 128  45.806 50.621 39.840 1.00 9.36 
ATOM 1913 OG SER 128  44.538 51.195 39.571 1.00 9.36 
ATOM 1915 C SER 128  45.325 48.172 40.360 1.00 9.36 
ATOM 1916 O SER 128  45.368 47.955 39.155 1.00 9.36 
ATOM 1917 N SER 129  44.953 47.236 41.238 1.00 11.24 
ATOM 1919 CA SER 129  44.395 45.938 40.826 1.00 11.24 
ATOM 1921 CB SER 129  44.091 45.053 42.031 1.00 11.24 
ATOM 1924 OG SER 129  43.483 45.786 43.085 1.00 11.24 

當我試圖此代碼:AWK '{如果($ 80 < 11){$ 9 = 「1.50」};打印$ 0}' xxx.pdb

發生這種情況:

ATOM 1910 CB SER 128 45.806 50.621 39.840 1.50 9.36 
ATOM 1913 OG SER 128 44.538 51.195 39.571 1.50 9.36 
ATOM 1915 C SER 128 45.325 48.172 40.360 1.50 9.36 
ATOM 1916 O SER 128 45.368 47.955 39.155 1.50 9.36 
ATOM 1917 N SER 129  44.953 47.236 41.238 1.00 11.24 
ATOM 1919 CA SER 129  44.395 45.938 40.826 1.00 11.24 
ATOM 1921 CB SER 129  44.091 45.053 42.031 1.00 11.24 
ATOM 1924 OG SER 129  43.483 45.786 43.085 1.00 11.24 

有關如何保留列格式的任何想法?

謝謝。

+0

什麼是字段之間的空白 - 單個選項卡字符或空白字符序列或每個或其他任何組合?你在每一行的開頭之前是否真的有空白,或者是你的文章有錯字? –

回答

0
awk 'BEGIN{FS=OFS="\t";}{if($10<11){$9="1.50"};print $0}' xxx.pdb 

使用製表符作爲輸入和輸出分隔符。

0

如果perl是好的

$ perl -ape 's/\S+(?=\s+\S+$)/1.50/ if $F[-1]<11' xxx.pdb 
ATOM 1910 CB SER 128  45.806 50.621 39.840 1.50 9.36 
ATOM 1913 OG SER 128  44.538 51.195 39.571 1.50 9.36 
ATOM 1915 C SER 128  45.325 48.172 40.360 1.50 9.36 
ATOM 1916 O SER 128  45.368 47.955 39.155 1.50 9.36 
ATOM 1917 N SER 129  44.953 47.236 41.238 1.00 11.24 
ATOM 1919 CA SER 129  44.395 45.938 40.826 1.00 11.24 
ATOM 1921 CB SER 129  44.091 45.053 42.031 1.00 11.24 
ATOM 1924 OG SER 129  43.483 45.786 43.085 1.00 11.24 
  • \S+(?=\s+\S+$)使用正向前查找匹配倒數第二場
    • 使用\S+(?=\s+\S+\s*$),如果有可能的空格在行尾
  • $F[-1]<11條件檢查最後一個字段是否小於11
  • 有關-ape選項的詳細信息,請參閱http://perldoc.perl.org/perlrun.html#Command-Switches。該-a選項將在太空自動分割輸入線並保存到@F陣列
0

隨着GNU AWK的gensub():

$ awk '$NF<11{$0=gensub(/\S+(\s+\S+)$/,"1.50\\1",1)}1' file 
ATOM 1910 CB SER 128  45.806 50.621 39.840 1.50 9.36 
ATOM 1913 OG SER 128  44.538 51.195 39.571 1.50 9.36 
ATOM 1915 C SER 128  45.325 48.172 40.360 1.50 9.36 
ATOM 1916 O SER 128  45.368 47.955 39.155 1.50 9.36 
ATOM 1917 N SER 129  44.953 47.236 41.238 1.00 11.24 
ATOM 1919 CA SER 129  44.395 45.938 40.826 1.00 11.24 
ATOM 1921 CB SER 129  44.091 45.053 42.031 1.00 11.24 
ATOM 1924 OG SER 129  43.483 45.786 43.085 1.00 11.24 

以上將工作無論白色空間域之間是什麼(標籤,空格,不管...)。