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