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;
}
酔った頭では意味わからんかったんですが今見たらすぐわかりました。なるほどなるほど。ありがとうございますです。