[英]Issues passing AWK output to BASH Variable
我正在嘗試從BASH中的錯誤日志中解析行,然后將某個部分發送到BASH變量中,以供稍后在腳本中使用,並且在嘗試將其傳遞給BASH變量時出現問題。
日志文件如下所示:
1446851818|1446851808.1795|12|NONE|DID|8001234
我需要該行的第三組中的數字(在這種情況下,該數字是12)
這是我正在運行的命令的示例:
tail -n5 /var/log/asterisk/queue_log | grep 'CONNECT' | awk -F '[|]' '{print $3}'
該行代碼試圖實現這一點:
如果我運行上面的完整命令,它將成功運行,如下所示:
tail -n5 /var/log/asterisk/queue_log | grep 'CONNECT' | awk -F '[|]' '{print $3}'
12
現在,如果我嘗試將其分配給同一行/命令中的變量,則無法使它回顯該變量。
分配變量時的命令如下:
tail -n5 /var/log/asterisk/queue_log | grep 'CONNECT' | brand=$(awk -F '[|]' '{print $3}')
(它在與echo命令相同的腳本中運行,因此變量應該很好,測試腳本如下所示:
#!/bin/bash
tail -n5 /var/log/asterisk/queue_log | grep 'CONNECT' | brand=$(awk -F '[|]' '{print $3}')
echo "$brand";
我知道這很可能不是最有效/有說服力的解決方案,因此,如果還有其他想法/方法可以做到這一點,我也會向他們開放(我的BASH技能很基本,但正在提高)
您需要捕獲整個管道的輸出,而不僅僅是它的最后一部分:
brand=$(tail -n5 /var/log/asterisk/queue_log | grep 'CONNECT' | awk -F '|' '{print $3}')
您可能還想考慮如果文件的最后五行中有多行包含CONNECT
情況(或者實際上,如果沒有行)會發生什么。 這將導致brand
具有多個 (或沒有)價值。
如果您打算從包含CONNECT
的文件的最新行中獲取第三個字段,則awk
幾乎可以處理整個事情,而無需tail
或grep
:
brand=$(awk -F '|' '/CONNECT/ {latest = $3} END {print latest}')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.