逐行搜索文件,使用匹配变量进行下游应用程序

时间:2017-10-23 19:43:11

标签: shell grep

我正在使用的文件看起来像这样(我从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;。

命名

1 个答案:

答案 0 :(得分:1)

请注意,内置的read(POSIX兼容)将从标准输入中读取一行并将其拆分为字段IFS中提供了字分隔符)

假设您的列是以空格分隔的(意味着您不必更改IFS),并且您希望将第一个字段读入var1,将第二个字段读入{{1}你只需使用:

即可
var2