開始単語は含まれていますが、終了単語は含まず、2つの単語の間にある複数のテキストインスタンスを抽出します。

開始単語は含まれていますが、終了単語は含まず、2つの単語の間にある複数のテキストインスタンスを抽出します。

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

おすすめ記事