Regex 使用awk和正则表达式检查许可证?

Regex 使用awk和正则表达式检查许可证?,regex,perl,shell,awk,Regex,Perl,Shell,Awk,我将作业提交给我所在大学的SGE批处理引擎,并运行一个名为COMSOL的程序,该程序的许可证数量有限,无法在给定时间运行。当我提交作业时,它会在队列中等待一段时间,直到轮到我为止。如果所有的COMSOL许可证都被使用,我的工作将立即退出,我必须重新提交,可能需要等待几天才能重试。我想避免这样。我为一个程序创建了一个别名comsollicense,该程序输出COMSOL及其不同模块的所有许可。其中有一行是这样的: Users of COMSOL: (Total of 7 licenses iss

我将作业提交给我所在大学的SGE批处理引擎,并运行一个名为COMSOL的程序,该程序的许可证数量有限,无法在给定时间运行。当我提交作业时,它会在队列中等待一段时间,直到轮到我为止。如果所有的COMSOL许可证都被使用,我的工作将立即退出,我必须重新提交,可能需要等待几天才能重试。我想避免这样。我为一个程序创建了一个别名comsollicense,该程序输出COMSOL及其不同模块的所有许可。其中有一行是这样的:

Users of COMSOL:  (Total of 7 licenses issued;  Total of 7 licenses in use)
输出中还有其他类似的行:

Users of WAVEOPTICS:  (Total of 2 licenses issued;  Total of 0 licenses in use)
Users of CHEM:  (Total of 2 licenses issued;  Total of 2 licenses in use)
etc....
在我的SGE作业脚本中,我想选择以COMSOL用户开始的行,并将使用中的许可证数量与颁发的数量进行比较。如果它们是相同的号码,我希望它等待,稍后再检查,当有可用的许可证时,我希望我的COMSOL运行。我的想法是:

awk '{
    comsollicense
    SOME CODE HERE TO EXTRACT numIssued AND numUsed
    while (numIssued == numUsed){
        sleep 300
        comsollicense
        CODE TO EXTRACT numIssued AND numUSED
    }
}'
comsol -inputfile test.mph

这是一个合适的方法吗?我想我可以在那里使用正则表达式,但我对如何编写正则表达式并不十分熟悉。如何提取已颁发的许可证数量和正在使用的许可证数量?

打印已颁发的许可证数量:

awk '/COMSOL/ { print $6; }'  comsollicense
打印正在使用的许可证数量:

awk '/COMSOL/ { print $11; }'  comsollicense

您可以在shell脚本中使用它。希望这能有所帮助。

当其他人在等待时,让你的工作坐在队列中什么也不做不是有点粗鲁吗?当您的作业处于休眠状态时,其他作业可能正在运行,这些作业使用可用的许可证。不,您正在尝试将awk用作shell。编写一个shell脚本来调用cosmolicense、awk和sleep。通常许可证释放得比较快,所以这个任务不会在那里等待几个小时,也许30分钟左右。在我看来,把30分钟和等它再试一次的日子相比,似乎还可以。理想情况下,SGE中会集成一些功能,可以在开始工作之前检查许可证,但这似乎不是一个选项。如果我写一个shell脚本,我的正则表达式会是什么样子?我尝试过类似于/'COMSOL的用户:\d个已颁发的许可证总数;正在使用的\d个许可证的总数\'/但不匹配。谢谢!这比我想象的要复杂得多。我想我需要更多地学习正则表达式。使用awk不需要太多正则表达式。使用字段positions awk'/Users of COMSOL/{print$6-$11}'comsollicense可以将差异作为单个输出。