将命令的输出与另一个命令的最后一个字段合并
merge a command's output with another's last field
xen列表; xen 正常运行时间,想要将两个命令 o/p 合并为单个..
hostname1-$ xen list; xen uptime
Name ID Mem VCPUs State Time(s)
Domain-0 0 1917 24 r----- 6651158.5
aa 1 8192 4 -b---- 5826608.0
bb 9 12288 4 r----- 192566.9
Name ID Uptime
Domain-0 0 176 days, 10:54:22
aa 1 176 days, 10:15:33
bb 9 5 days, 0:29:35
我尝试了多种方法来使用 awk、grep 和 sed 进行合并,但没有像预期的那样低于 o/p
Name ID Mem VCPUs State Time(s) uptime
Domain-0 0 1917 24 r----- 6651158.5. 176 days,
aa 1 8192 4 -b---- 5826608.0. 176 days,
bb 9 12288 4 r----- 192566.9. 5 days
我只想要第二个命令中的正常运行时间字段o/p..
请帮我一下
能否请您尝试以下。使用显示的示例编写和测试。
awk 'FNR==NR{if(FNR==1){a[]=$NF;next};match([=10=],/[0-9]+ days/);a[]=substr([=10=],RSTART,RLENGTH);next} {print [=10=],a[]}' <(xen uptime) <(xen list)
或添加非单线性形式的解决方案:
awk '
FNR==NR{
if(FNR==1){
a[]=$NF
next
}
match([=11=],/[0-9]+ days/)
a[]=substr([=11=],RSTART,RLENGTH)
next
}
{
print [=11=],a[]
}' <(xen uptime) <(xen list)
编辑: 根据 OP,如果有人不想打印状态和时间值,请尝试以下操作。
awk '
FNR==NR{
if(FNR==1){
a[]=$NF
next
}
match([=12=],/[0-9]+ days/)
a[]=substr([=12=],RSTART,RLENGTH)
next
}
{
$NF=$(NF-1)=""
sub(/ +$/,"")
print [=12=],a[]
}' <(xen uptime) <(xen list)
假设这些输出是制表符分隔的:
paste <(xen list) <(xen uptime | awk -F'\t' '{print $NF}')
xen列表; xen 正常运行时间,想要将两个命令 o/p 合并为单个..
hostname1-$ xen list; xen uptime
Name ID Mem VCPUs State Time(s)
Domain-0 0 1917 24 r----- 6651158.5
aa 1 8192 4 -b---- 5826608.0
bb 9 12288 4 r----- 192566.9
Name ID Uptime
Domain-0 0 176 days, 10:54:22
aa 1 176 days, 10:15:33
bb 9 5 days, 0:29:35
我尝试了多种方法来使用 awk、grep 和 sed 进行合并,但没有像预期的那样低于 o/p
Name ID Mem VCPUs State Time(s) uptime
Domain-0 0 1917 24 r----- 6651158.5. 176 days,
aa 1 8192 4 -b---- 5826608.0. 176 days,
bb 9 12288 4 r----- 192566.9. 5 days
我只想要第二个命令中的正常运行时间字段o/p..
请帮我一下
能否请您尝试以下。使用显示的示例编写和测试。
awk 'FNR==NR{if(FNR==1){a[]=$NF;next};match([=10=],/[0-9]+ days/);a[]=substr([=10=],RSTART,RLENGTH);next} {print [=10=],a[]}' <(xen uptime) <(xen list)
或添加非单线性形式的解决方案:
awk '
FNR==NR{
if(FNR==1){
a[]=$NF
next
}
match([=11=],/[0-9]+ days/)
a[]=substr([=11=],RSTART,RLENGTH)
next
}
{
print [=11=],a[]
}' <(xen uptime) <(xen list)
编辑: 根据 OP,如果有人不想打印状态和时间值,请尝试以下操作。
awk '
FNR==NR{
if(FNR==1){
a[]=$NF
next
}
match([=12=],/[0-9]+ days/)
a[]=substr([=12=],RSTART,RLENGTH)
next
}
{
$NF=$(NF-1)=""
sub(/ +$/,"")
print [=12=],a[]
}' <(xen uptime) <(xen list)
假设这些输出是制表符分隔的:
paste <(xen list) <(xen uptime | awk -F'\t' '{print $NF}')