2017-09-15 110 views
0

我試圖將命令輸出合併到一行中,以便打印輸出以顯示機器名稱,裝載和「聯機」狀態。合併多行命令輸出

這裏是輸出怎麼弄出來:

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

是的,只是編輯了原來的評論。謝啦。 – theGlitchKing

+0

我不認爲這是一個問題。命令輸出只是摺疊,以適應我猜的屏幕寬度。您是否也可以發佈樣例屏幕截圖,以顯示第二行中的輸出,如上所示 – Inian

+0

正如您從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

回答

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命令,它在一行中輸出完整的掛載。

0

有:... | grep -i -A1 brick | paste -d "" - -

+0

我試過了,輸出仍然裹在我長長的gluster坐騎上。 – theGlitchKing