Linux 将xargs值作为参数传递给后续命令

Linux 将xargs值作为参数传递给后续命令,linux,hadoop,grep,yarn,xargs,Linux,Hadoop,Grep,Yarn,Xargs,需要将参数从xargs传递到后续Hadoop命令的帮助 yarn application -list -appStates RUNNING | grep <user> | awk '{print $1}' 我从这个命令中得到如下结果 yarn application -list -appStates RUNNING | grep <user> | awk '{print $1}' 我需要能够通过上面的输出一个接一个下面的命令 yarn application -mov

需要将参数从xargs传递到后续Hadoop命令的帮助

yarn application -list -appStates RUNNING | grep <user> | awk '{print $1}'
我从这个命令中得到如下结果

yarn application -list -appStates RUNNING | grep <user> | awk '{print $1}'
我需要能够通过上面的输出一个接一个下面的命令

yarn application -movetoqueue <application_ID of above output> -queue myqueue
纱线应用程序-movetoqueue-queue myqueue
你能帮我找到正确的命令来达到同样的效果吗

类似的设置在下面的命令中对我起作用,但在上面的命令中不起作用,因为上面的命令有n

(a)

纱线应用程序-列表-运行| grep | awk{print$1}| xargs的应用程序状态 -n1 纱线应用-压井
这是另一种方式

b、 )适用于
纱线应用程序-列表中的应用程序运行| grep | awk'{print$1}'
;执行纱线应用程序-杀死“$app”;完成


感谢您的帮助。

xargs
读取
STDIN
流数据,并将每一行转换为命令的空格分隔参数。 xargs在您的案例中可能不起作用的一些原因:

  • 使用xargs,此命令的参数为“纱线应用程序” -movetoqueue“application_ID”-queue myqueue“在其末尾传递
  • 并非所有应用程序/工具都接受多个分隔空间 争论
  • 命令的结果是一个包含特殊字符的字符串,应将其引用
  • 因此,我建议如下:

    for appid in `yarn application -list -appStates RUNNING | grep user|awk '{print $1}'` ; do 
        yarn application -movetoqueue "${appid}" -queue myqueue;
    done
    

    非常感谢您的语法,它使用for循环命令。非常感谢。@Ardit,您能检查一下下面是否也可以用同样的方式工作吗?对于appid,请参见
    oozie作业-info 0007218-170910003406158-oozie-oozi-W | grep作业| awk'{print$3}| cut c4-23 | sed's/job/application/
    ;do纱线日志-applicationId“${appid}”-所有者user9;donefor循环用于从命令输出表达式中获取变量,因此您应该将命令放在$(oozie job-info 0007218-170910003406158-oozie-oozi-W | grep job | awk'{print$3}cut-c4-23 | sed's/job/application/)中的appid的$()
    中;do纱线日志-applicationId“${appid}”-所有者user9;完成
    您的命令中使用的工具太多,只能使用
    awk
    sed
    执行。如果您还有其他疑问,请发布更多信息(输入、指定输出)。新问题,请在何处将此问题标记为已完成?另外,你能看看这个吗。邮递
    for appid in `yarn application -list -appStates RUNNING | grep user|awk '{print $1}'` ; do 
        yarn application -movetoqueue "${appid}" -queue myqueue;
    done