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