Del*_*aIV 1 bash awk cluster-computing
我在使用bash脚本时遇到问题。基本上,在我的脚本中运行命令
bjobs -u $1
Run Code Online (Sandbox Code Playgroud)
$ 1是脚本参数,它是集群中用户的ID。如果用户$ 1在群集上没有正在运行/待处理的作业,则打印bjobs
No unfinished jobs found
Run Code Online (Sandbox Code Playgroud)
到标准输出。另外,退出状态为255。如果用户$ 1确实有工作,则bjobs将输出:
JOBID USER STAT QUEUE FROM_HOST EXEC_HOST JOB_NAME SUBMIT_TIME
45823 .......
45824 .......
.
.
Run Code Online (Sandbox Code Playgroud)
并且退出状态为0。我想awk解析bjobs的输出。我试过了
bjobs -u $1 | awk '...'
Run Code Online (Sandbox Code Playgroud)
其中“ ...”是我的awk解析程序。这不能很好地工作,因为显然,当用户$ 1没有正在运行/待处理的作业时,字符串“未找到未完成的作业” 不会传递给awk。同样的情况发生在
bjobs -u $1 > foo
awk '...' foo
Run Code Online (Sandbox Code Playgroud)
有什么建议么?
也许该消息(我想是一种错误)不是STDOUT而是STDERR。
您可以使用>将bash中的IO流重定向到文件描述符,并且2是STDERR。
尝试:
bjobs -u $1 2>&1 | awk '...'
Run Code Online (Sandbox Code Playgroud)
看看是否能为您解决。2>&1部分意味着将STDERR(2)重定向到STDOUT(1),而STDOUT是通过管道传输到awk的内容。
更多信息:http : //www.tldp.org/LDP/abs/html/io-redirection.html