簡體   English   中英

將AWK輸出傳遞到BASH變量的問題

[英]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}'

該行代碼試圖實現這一點:

  1. 抓取日志文件的最后幾行
  2. 搜索短語(在這種情況下,connect,我使用相同的命令來觸發不同的項)
  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幾乎可以處理整個事情,而無需tailgrep

brand=$(awk -F '|' '/CONNECT/ {latest = $3} END {print latest}')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM