]
トップ «前の日記(2014-07-08) 最新 次の日記(2019-08-28)» 編集

Yukiharu YABUKI の tDiary



このtDiaryを検索します。

2014-10-29 [長年日記]

_ [Awk] pdbを処理するプログラム、再び。

このエントリーはほぼ一人のために書いています。他の人で有用かどうかは分かりません。 PDB原子座標入力形式 バージョン 3.2 の形式を扱う awk のコード の続き 下記のようなデータを処理するawkのひな形
ATOM   1534  O   HOH D4175     -15.917  -2.349  -5.049 10.50 38.70           O  
ANISOU 1534  O   HOH D4175     9613   1110   3981    739   -737   -411       O  
ATOM   1535  O   HOH D4176     -22.395 -31.001 -14.913 11.00 42.50           O  
ANISOU 1535  O   HOH D4176     2536   4368   9243    126   -371   -647       O
任意の数字の4桁を3桁にしたいらしいので、awkのfunctionをつくっておいた。diminish_digitです。 以下、参考ソースコード。上記のデータをツッコンで実行し、エラーがないことは、Linuxで確認した。
#!/usr/bin/env awk -f
# PDB data manipulator basics (awk version)
#
# This program give you skeleton of manipulating PDB data.
# Enjoy!
#
# * How to use
# $awk -f your.awk < input.data > output.data
#  
# Author: Yukiharu YABUKI 
# License : GPL v3 
# If you don't know GPL v3 license.
# Please go to http://gplv3.fsf.org
{
    # ATOMが先頭だったときの行処理
    if ($1 ~ /^ATOM/){
        # print $0 #Debug print
        # 何カラム目か分からないので、該当するカラムでやること
        if ($2 > 1000){
            d = $2 - 1000; # 1000引くだけじゃないなら、functionを呼べ
        }
        # そのカラムでの出力処理
        printf("%3d", d);
        # データを、そのままか加工して出す
        # 最後 改行して一行おわり
        printf("\n");
    }
    # ANISOUが先頭だったときの行処理
    if($1 ~ /^ANISOU/){
        # print $0 #Debug print
        # 何カラム目か分からないので、該当するカラムでやること
        if ($2 > 1000){
            d = diminish_digit($2);
        }else{
            d = $2 - 10; # 10だけ引く
        }
        # そのカラムでの出力処理
        printf("%3d", d);
        # データを、そのままか加工して出す
        # 最後 改行して一行おわり
        printf("\n");
    }
}
# 桁を縮める
function diminish_digit(d){
    while(d > 999){
        d = d - 1000;
    }
    return d;
}
本日のツッコミ(全1件) [ツッコミを入れる]
_ いくこ (2014-10-30 10:27)

酔った頭では意味わからんかったんですが今見たらすぐわかりました。なるほどなるほど。ありがとうございますです。