[英]merging multiline command output
我试图将命令输出合并到一行中,以便打印输出以显示计算机名称,安装和“在线”状态。
输出结果如下:
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
| grep -i brick
我明白了
Brick mymachine01:/bricks/mymount/mylongcha
Brick mymachine02:/bricks/mymount/mylongcha
不会显示我需要的其他任何数据,例如“在线”。 我怀疑发生这种情况是因为grep只查找匹配的行,并查看第一个输出,由于下一行安装点实际结束后的数据,该字段在fields部分下为空白。
有没有办法将这两行合并,因为我需要将数据发布到状态和PID的安装点之后?
输出应如下所示:
Brick mymachine01:/bricks/mymount/mylongchaachtermnt 49156 0 Y 6448
Brick mymachine02:/bricks/mymount/mylongcharahtermnt 49156 0 Y 6484
每个都在一行上。 我将在脚本的每一行前面添加一个时间戳,但这只是首选项。
有: ... | grep -i -A1 brick | paste -d "" - -
... | grep -i -A1 brick | paste -d "" - -
我最终得到了这个脚本:
#!/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命令,该命令在一行中输出完整的安装文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.