簡體   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