繁体   English   中英

合并多行命令输出

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM