文字列に変数を使用する

文字列に変数を使用する

問題が発生しました。私は自動化のためにLinuxを使用する生物学者なので、最高のプログラミングの背景知識がないので、助けてくれてありがとう。

数千行のテキストを含む大きなテキストファイルがあります。たとえば、次のようになります。

1. ATOM   1698  NE2AGLN A 400      14.237 -14.941 -28.964  0.50 19.10    -0.370 N 
2. ATOM   1699  HE2A1GLN A 400      15.059 -14.399 -28.698  1.00  0.00     0.159 HD
3. ATOM   1700  HE2A2GLN A 400      13.869 -15.668 -28.351  1.00  0.00     0.159 HD
4. ATOM   1701  NE2BGLN A 400      11.754 -15.026 -32.239  0.50 15.67    -0.370 N 
5. ATOM   1702  HE2B1GLN A 400      11.970 -15.937 -31.835  1.00  0.00     0.159 HD
6. ATOM   1703  HE2B2GLN A 400      11.794 -14.906 -33.251  1.00  0.00     0.159 HD
7. ATOM   1704  N   ASP A 401      10.553 -18.216 -28.161  1.00 15.63    -0.231 NA
8. ATOM   1705  CA AASP A 401      10.830 -19.591 -27.761  0.50 16.06     0.160 C 

他の行と一致しない行のスペースの1つを削除して、ファイル内の特定の行を変更する必要があります。私がリストしたコードでは、2行、3行、5行、6行に文字が多すぎるため、スペースを削除する必要があります。必要に応じて、列2と列3(たとえば、1702とHE2B1GLNの間)の間の単一のスペースを削除したいと思います。

一連のsedコマンドを使用して、これらの問題のある行を見つけて、スペース1を引いた同じ文字列に置き換えるコードを作成しました。例は次のとおりです。

for i in {1..10}
do
echo $i

    sed "s/  HE2B$iGLN/ HE2B$iGLN/g" NEW2.pdbqt>NEW3.pdbqt

done

問題は、これは間違った行を修正し、「GLN」で終わる列は除外されることです。文字列の中央にある1つの数字を変更する一種のループを作成する必要がありますが、sedコマンドの一部として保持するには文字列の両方が必要なため、これは問題です。

これが十分に明確になることを願っています。これは私の最初のプログラミング記事です。

正しい構文/解決方法を知っている人はいますか?

ベストアンサー1

おそらく、数値に関係なく、一致する正規表現を使用するsedステートメントを実行できます。

sed 's/  *\( HE2B[0-9][0-9]*GLN\)/\1/g;' NEW2.pdbqt > NEW3.pdbqt

このHE2B行にのみこの問題がありますか、それともすべての行にこの問題がありますか?ファイルの3番目のフィールドですか、それとも複数のスペースの異なるインスタンスがありますか?これにより、1行に1つのスペースしかないように、すべての行で複数のスペースのすべてのインスタンスをスカッシュできます。

sed 's/   */ /g;' NEW2.pdbqt > NEW3.pdbqt

先行および/または末尾のスペースに問題がある場合は、スペースを削除することもできます。

sed 's/^  *//; s/  *$//; s/   */ /g;' NEW2.pdbqt > NEW3.pdbqt

このファイルに対して上記のコマンドを実行します(私は末尾のスペースに「!」を使用しました)。

   ATOM    1698 NE2AGLN A 400 14.237 -14.941 -28.964 0.50 19.10 -0.370 N
ATOM 1699 HE2A1GLN A 400 15.059 -14.399 -28.698 1.00 0.00 0.159 HD
ATOM 1700    HE2A2GLN A 400 13.869 -15.668 -28.351      1.00 0.00 0.159 HD
ATOM 1701 NE2BGLN A 400 11.754 -15.026 -32.239 0.50 15.67 -0.370 N
ATOM 1702  HE2B1GLN A 400 11.970 -15.937 -31.835 1.00 0.00 0.159 HD!!
ATOM 1703       HE2B2GLN A 400 11.794 -14.906 -33.251 1.00 0.00 0.159 HD
          ATOM 1704 N ASP A 401 10.553 -18.216 -28.161 1.00 15.63 -0.231 NA!!!!
ATOM 1705 CA AASP A 401 10.830 -19.591 -27.761 0.50 16.06 0.160 C

次を生成します。

ATOM 1698 NE2AGLN A 400 14.237 -14.941 -28.964 0.50 19.10 -0.370 N
ATOM 1699 HE2A1GLN A 400 15.059 -14.399 -28.698 1.00 0.00 0.159 HD
ATOM 1700 HE2A2GLN A 400 13.869 -15.668 -28.351 1.00 0.00 0.159 HD
ATOM 1701 NE2BGLN A 400 11.754 -15.026 -32.239 0.50 15.67 -0.370 N
ATOM 1702 HE2B1GLN A 400 11.970 -15.937 -31.835 1.00 0.00 0.159 HD
ATOM 1703 HE2B2GLN A 400 11.794 -14.906 -33.251 1.00 0.00 0.159 HD
ATOM 1704 N ASP A 401 10.553 -18.216 -28.161 1.00 15.63 -0.231 NA
ATOM 1705 CA AASP A 401 10.830 -19.591 -27.761 0.50 16.06 0.160 C

おすすめ記事