在字符串中使用变量

在字符串中使用变量

我被一个问题困住了。我是一名生物学家,使用 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 

我需要修改该文件的某些行才能使用它,方法是删除与其他行不对齐的行的空格之一。在我列出的代码中,第 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几条线路有这个问题,还是所有线路都有这个问题?只是文件中的第三个字段,还是存在多个空格的其他实例?您可以使用它来压缩所有行上多个空格的所有实例,以便一行中只有一个空格:

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

相关内容