我正在尝试将命令输出合并为一行,以便打印输出以显示计算机名称,装载和“在线”状态。
这是输出的输出方式:
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 :(得分:0)
有:... | grep -i -A1 brick | paste -d "" - -
答案 1 :(得分: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命令,它会在一行中输出完整的挂载。