問題が発生しました。私は自動化のために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