ㅏPDBファイルには、タンパク質構造に関する多くの詩が含まれています。
各形式はキーワードで始まります。原子キーワードで終わる終わり。
ATOMからENDまでのすべての行を読むことができるように、bashからファイルを読み取ろうとしますが、ENDという単語を読みたくありません。
各フォーム(段落)に対してこれを行い、各段落を配列に保存したいと思います。
ファイルは次のようになります。
ATOM line 1...
ATOM line 2...
ATOM line 3...
# More lines....
END
ATOM line 1...
ATOM line 2...
ATOM line 3...
# more lines...
END
一つ原子到着終わり形態である。
各型を配列で読み取ることができるようにしたい。ATOMは含むがENDは含まない。
2つのキーワードの間のテキスト(2つの単語を除く)を読み取ることができますが、開始単語は含まれ、終了単語は除外する方法がわかりません。
conf[0]
また、各形式を=最初の形式、=2番目の形式などの配列に読み込むことはconf[1]
機能しません。
パスワード:
#!/bin/bash
filename='coor.pdb'
echo Start
i=0
while read line; do
conf[$i]=$(sed -n '/ATOM/,/END/{//!p}')
i=i+1
done < $filename
echo $conf[0] > first_frame.data
ベストアンサー1
#!/bin/bash
filename='coor.pdb'
echo Start
i=1
input=false
while read -r line
do
if [ "${line%% *}" == "ATOM" ]
then
input=true
elif [ "${line%% *}" == "END" ]
then
((i++)) # increase variable i by 1 == (i+1)
rm -f "${i}_frame.data" # remove ${i}_frame.data" if exist
input=false # stop output lines until next ATOM
fi
if $input # if var INPUT is true add line to ${i}_frame.data file
then
echo "$line" >> "${i}_frame.data"
fi
done < "$filename"
未来のためにsedヒント:
sed '/ATOM/,/END/!d;/END/d'
sed -n '/ATOM/{:;N;s/\nEND//;T;p}'
したがって、次の操作を実行できます。
nl -s'.frame.data' -b p"^END" coor.pdb |
sed -n '/ATOM/{s/^/echo \"/;:;s/ \{6,\}//;N;s/END//;T;s/\n */\">/p}' |
bash