Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 从命令';s输出_Bash_Shell_Awk_Grep - Fatal编程技术网

Bash 从命令';s输出

Bash 从命令';s输出,bash,shell,awk,grep,Bash,Shell,Awk,Grep,我有一个需求,我必须从命令的输出中捕获一个字符串,并将其存储起来以供进一步处理。问题是命令的输出有时可能会改变,因此这会导致错误的结果 请求的数据集看起来像 application_1532934978357_3376 app_name job_type user any_name_2 RUNNING UNDEFINED 10% hostname application_1532934978357_3375 app_name job_type user any_name_2 RUNNING

我有一个需求,我必须从命令的输出中捕获一个字符串,并将其存储起来以供进一步处理。问题是命令的输出有时可能会改变,因此这会导致错误的结果


请求的数据集看起来像

application_1532934978357_3376 app_name job_type user any_name_2 RUNNING 
UNDEFINED 10% hostname
application_1532934978357_3375 app_name job_type user any_name_2 RUNNING 
UNDEFINED 10% hostname
application_1532934978357_3374 app_name job_type user any_name_2 RUNNING 
UNDEFINED 10% hostname
application_1532934978357_249069 some_information_etc job_type any_name_2 
RUNNING UNDEFINED 95% hostname
application_1532934978357_239728 app_name job_type any_name_2 RUNNING 
UNDEFINED 10% hostname
application_1532934978357_89483 some_info job_type user any_name RUNNING 
UNDEFINED 10% hostname
application_1532934978357_248180 with prog_vrsn as
(se...select cast(Stage-27) job_type user any_name RUNNING UNDEFINED 36.1% 
hostname
application_15329349783879_657880 select cast
value ..(stage35) with table
where value=5; job_type user any_name RUNNING UNDEFINED 10% hostname
我使用:

cat in | grep "RUNNING" | grep "any_name" | awk '{print $1}'
它生成的输出为

application_1532934978357_89483 
(se...select cast(Stage-27)
where
而我希望将输出生成为:

application_1532934978357_89483 
application_1532934978357_248180 
application_15329349783879_657880 

您只需在命令中再添加一个grep:

命令的输出| grep“status_run”| grep-e“id_tag1”-e“id_tag2”| grep“app_id”| awk'{print$1}'

awk'(/status\u run/)&&(/app\u id*/)&(/id\u tag[12]/){print$1;}文件名

这将只打印id为tag1和tag2且其中包含“status\u run”的所有应用程序id


更新问题后的解决方案:

cat filename | grep“运行”| grep“任意名称”| grep“应用程序*”| awk'{print$1}'

如果要打印所有应用程序ID,请使用以下命令:


awk'/application*/{print$1}文件名

您只需在命令中再添加一个grep:

命令的输出| grep“status_run”| grep-e“id_tag1”-e“id_tag2”| grep“app_id”| awk'{print$1}'

awk'(/status\u run/)&&(/app\u id*/)&(/id\u tag[12]/){print$1;}文件名

这将只打印id为tag1和tag2且其中包含“status\u run”的所有应用程序id


更新问题后的解决方案:

cat filename | grep“运行”| grep“任意名称”| grep“应用程序*”| awk'{print$1}'

如果要打印所有应用程序ID,请使用以下命令:


awk'/application*/{print$1}文件名

这是一个GNU awk脚本,它只捕获与单词
任何名称
关联的
应用程序XXXX

awk -v RS='[ \n]' '/application_[0-9_]+/{a=$0}/\<any_name\>/{print a}' file
awk-vrs='[\n]'/application\[0-9\]+/{a=$0}/\/{print a}文件

它依赖于设置为捕获每个单词的记录分隔符
RS
application\u XXXX
字符串存储在变量
a
中,并在找到单词
any\u name
时打印。

这里是一个GNU awk脚本,它只捕获与单词
any\u name
关联的
应用程序XXXX

awk -v RS='[ \n]' '/application_[0-9_]+/{a=$0}/\<any_name\>/{print a}' file
awk-vrs='[\n]'/application\[0-9\]+/{a=$0}/\/{print a}文件


它依赖于设置为捕获每个单词的记录分隔符
RS
application_XXXX
字符串存储在变量
a
中,并在找到单词
任何_名称
时打印。

始终建议将样本包装在代码标签
{}
按钮中。始终建议将样本包装在代码标签
{}
按钮。所有代码都应该重构成一个Awk脚本。@tripleee我想@oliv已经回答了。他缺少运行状态部分。
您只需再添加一个grep
-这很有趣:-)
awk'/foo/'文件| awk'{print$1}'
=
awk'/foo/{print$1}'文件
。此外,awk使用真正的regexp而不是glob模式
/app\u id*/
匹配任何
app\u i app\u id app\u idd app\u idddddd
等。您可能指的是
/app\u id.*/
app\u id
后跟任何字符)但是您不需要
*
,因为默认情况下awk匹配是无任务的。@Ashutosh更新的命令/解决方案也将丢失应用程序ID:application_1532934978357_248180 application_15329349783879_657880但所有代码都应该重构为单个awk脚本。@tripleee我想@oliv已经回答了。他缺少运行状态部分。
您只需再添加一个grep
-这很有趣:-)
awk'/foo/'文件| awk'{print$1}'
=
awk'/foo/{print$1}'文件
。此外,awk使用真正的regexp而不是glob模式
/app\u id*/
匹配任何
app\u i app\u id app\u idd app\u idddddd
等。您可能指的是
/app\u id.*/
app\u id
后跟任何字符)但是您不需要
*
,因为默认情况下awk匹配是无任务的。@Ashutosh更新的命令/解决方案也将丢失应用程序id:application_1532934978357_248180 application_15329349783879_657880感谢您对解决方案进行编辑和尝试。尽管我在上面尝试时,它只给出了/prints id_标记价值添加更多信息。app\u id->实际上看起来像:app\u xxxx\u xxx(x=整数)。id_标记看起来像:some.string_srting.string。行用“\n”分隔,字段用空格分隔。感谢您的帮助。@cod_enthu请用一个包含您正在描述的用例的示例更新您的问题。请同时给出预期输出。不幸的是,对于给定的示例,我无法提供更多帮助。我现在已经更新了数据集和有问题的预期输出。@Cod|enthu如果是,只需将第二个条件更改为
/\\\\/
/\/\/
,感谢您对解决方案进行编辑和尝试。尽管当我在上面尝试时,它只会给我/prints id|u标记值。添加更多信息。app\u id->实际上看起来像:app\u xxxx\u xxx(x=整数)。id_标记看起来像:some.string_srting.string。行用“\n”分隔,字段用空格分隔。感谢您的帮助。@cod_enthu请用一个包含您正在描述的用例的示例更新您的问题。请同时给出预期输出。不幸的是,对于给定的示例,我无法提供更多帮助。我现在已经更新了数据集和有问题的预期输出。@Cod\u enthu如果是,只需将第2个条件更改为
/\\\/
/\/