2017-09-15 109 views
0

我试图将命令输出合并到一行中,以便打印输出以显示机器名称,装载和“联机”状态。合并多行命令输出

这里是输出怎么弄出来:

Status of volume: mymount 
Gluster process        TCP Port RDMA Port Online Pid 
------------------------------------------------------------------------------ 
Brick mymachine01:/bricks/mymount/mylongcha 
achtermnt         49156  0   Y  6648 
Brick mymachine02:/bricks/mymount/mylongcha 
achtermnt         49156  0   Y  6484 

当我执行我的命令,并使用常用的| grep -i brick我得到这个

Brick mymachine01:/bricks/mymount/mylongcha 
Brick mymachine02:/bricks/mymount/mylongcha 

不显示任何其他数据我需要,比如'在线'。我怀疑这是因为grep只查找匹配行,并且查看第一个输出,由于下一行上的装载点实际结束后的数据,因此该行在字段部分为空。

有没有办法将这两条线合并,因为我需要数据发布状态和PID的挂载点?

输出应该是这样的:

Brick mymachine01:/bricks/mymount/mylongchaachtermnt 49156  0  Y  6448 
Brick mymachine02:/bricks/mymount/mylongcharahtermnt 49156  0  Y  6484 

在一行。我将在脚本的每行前添加时间戳,但这只是首选项。

+0

是的,只是编辑了原来的评论。谢啦。 – theGlitchKing

+0

我不认为这是一个问题。命令输出只是折叠,以适应我猜的屏幕宽度。您是否也可以发布样例屏幕截图,以显示第二行中的输出,如上所示 – Inian

+0

正如您从https://access.redhat.com/documentation/en-US/Red_Hat_Storage/2.0/html/Administration_Guide/sect-User_Guide- Monitor_Workload-Displaying_Volume_Status.html它确实发布在同一行 – Inian

回答

0

我结束了这个脚本:

#!/bin/bash 


mapfile -t HOST < <(gluster volume status all detail | grep brick | awk '{ print $4 }' | grep -oP "myHost\d+") 
mapfile -t MNT < <(gluster volume status all detail | grep brick | awk '{ print $4 }' | grep -oP "\/bricks.+") 
mapfile -t STATUS < <(gluster volume status all detail | grep -i online | awk '{ print $3 }') 

i=0; 
for item in "${HOST[@]}"; do 
    echo ${HOST[$i]} ${MNT[$i]} ${STATUS[$i]}; 
    let "i=i+1" 
done 

这有我的输出,用什么看起来像一个状态单独列印在每个阵列。

我也不得不使用不同的gluster命令,它在一行中输出完整的挂载。

0

有:... | grep -i -A1 brick | paste -d "" - -

+0

我试过了,输出仍然裹在我长长的gluster坐骑上。 – theGlitchKing