Job = grep 'Job:' | awk '{ print $3 }'
Status = grep 'Job Status:' | awk '{ print $3 }'
使用两个echo语句正确打印两个变量。我想在一行中找到像作业名称 - 状态这样的结果。我尝试过以下命令。但它只打印第二个变量,如 - 状态
echo "$Job - $Status"
echo "${Job} - ${Status}"
echo -e "${Job} - ${Status}"
请帮忙!
答案 0 :(得分:1)
您可以使用一个awk命令执行此操作:
awk '/Job:/ { job = $3 } /Job Status:/ { status = $3 } END { print job " - " status }' file
如果Job:
出现在Job Status
之前:
awk '/Job:/ { job = $3 } /Job Status:/ { print job " - " $3; exit }' file
反之亦然:
awk '/Job Status:/ { status = $3 } /Job Status:/ { print $3 " - " status; exit }' file
答案 1 :(得分:1)
我认为应该有效:
echo $(awk ' /Job:/ { print $3} ' file)" - "$(awk ' /Job Status:/ { print $3} ' file)
但是konsolebox的版本可能更好,因为只有一个awk调用。
答案 2 :(得分:0)
我认为您正在尝试了解如何获取运行某些命令的结果并将其存储在变量中。然后你想要做两次并在同一行上打印两个变量。
所以基本语法是:
result=$(some command)
e.g。如果
date +'%Y'
告诉你这一年是2014年,但是你想要一个名为year
的变量2014,你可以做到
year=$(date +'%Y')
那么你可以像这样回复$year
:
echo $year
2014
所以,在你的实际问题中,你需要两个变量,一个用于两个命令的输出:
job=$(grep "Job:" someFile | awk '{print $3}')
status=$(grep "Job Status:" someFile | awk '{print $3}')
然后你可以这样做:
echo $job $status
并将两件事放在同一条线上。
其他答案是说你可以避免两次调用awk
,这是事实,但是没有解释如何捕获将命令运行到变量中的结果。一般情况下,您不需要使用awk
和grep
,因为:
grep xyz | awk ...
相当于
awk '/xyz/ {...}'
但使用少一个进程(即没有grep
),因此资源更少。
顺便说一句,你不能在{b}中任何一侧放置任何空格。它是
=
不
variable=something