我正在使用的文件看起来像这样(我从2列剪切并粘贴):
1077551 c1ccc(cc1)n2c(nnc2SCC(=O)NC3CCCCC3)c4ccccc4O
1364513 CCn1c(nnc1SCC(=O)Nc2cccc(c2C)C)c3ccccc3N
1364529 CCn1c(nnc1SCC(=O)Nc2ccccc2Cl)c3ccccc3N
2270998 CC(C)(C)c1cc(c(c2c1nc(o2)c3ccccc3O)O)C(C)(C)C
2357441 C[C@@H]1CCc2c(sc3c2c(nc(n3)SCC(=O)Nc4ccccc4)N)C1
我目前的代码是:
file=./testin
while IFS= read -r line; do
var1=$(grep -P '\d{6,8}');
var2=$(grep -i -P '[A-Z].*');
obabel -:"$var2" -o mol -O ./${var1%.*}.mol
done < "$file"
这个想法是匹配行中的数字并存储为var1,然后匹配以下字符串(不知道如何有效地执行此操作,因为它以字母或数字结尾)并将其指定为var2。在此之后,$ var1和$ var2输入到&#34; obabel&#34;命令输出文件以&#34; var1&#34;。
命名答案 0 :(得分:1)
请注意,内置的read
(POSIX兼容)将从标准输入中读取一行并将其拆分为字段(IFS
中提供了字分隔符)
假设您的列是以空格分隔的(意味着您不必更改IFS
),并且您希望将第一个字段读入var1
,将第二个字段读入{{1}你只需使用:
var2