合并多行命令输出
问题描述:
我试图将命令输出合并到一行中,以便打印输出以显示机器名称,装载和“联机”状态。合并多行命令输出
这里是输出怎么弄出来:
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
各
在一行。我将在脚本的每行前添加时间戳,但这只是首选项。
答
我结束了这个脚本:
#!/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命令,它在一行中输出完整的挂载。
是的,只是编辑了原来的评论。谢啦。 – theGlitchKing
我不认为这是一个问题。命令输出只是折叠,以适应我猜的屏幕宽度。您是否也可以发布样例屏幕截图,以显示第二行中的输出,如上所示 – Inian
正如您从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