簡體   English   中英

AWK:返回值到 shell 腳本

[英]AWK: return value to shell script

Is it possible to have an awk command within a bash script return values to a bash variable, ie,if my awk script does some arithmetic operations, can I store the answers in variables so, they can be accessed in the bash script. 如果可能,如何區分多個返回變量。 謝謝。

不可以。您可以使用exit返回錯誤代碼,但通常不能從子進程修改shell環境。

當然,您也可以使用read在awk中打​​印所需內容並將其放入bash變量中:

read a b c <<< $(echo "foo" | awk '{ print $1; print $1; print $1 }')

現在$a$b$c都是'foo'。 請注意,您必須使用<<<$()語法才能使讀取工作。 如果您使用任何類型的管道,那么也會創建一個子流程,並且當管道執行完畢后,環境read會創建變量in。

var=$(awk '{ print $1}')

這應該將var設置為awk的輸出。 然后,您可以使用字符串函數或其中的任何內容來區分值,或者只使用awk打印您想要的部分。

我知道這個問題很老,但是還有另一種方法對我來說效果很好,那就是使用未使用的文件描述符。 我們都知道標准輸入(&0)、標准輸出(&1)和標准錯誤(&2),但只要你重定向它(又名:使用它),你沒有理由不能使用fd3(&3)。

與其他答案相比,此方法的優勢在於您的 awk 腳本仍然可以像往常一樣寫入標准輸出,但您也可以在 bash 中獲得結果變量。

最后,在您的 awk 腳本中,執行以下操作:

END {
  # print the state to fd3
  printf "SUM=%s;COUNT=%s\n", tot, cnt | "cat 1>&3"
}

然后,在您的 bash 腳本中,您可以執行以下操作:

awk -f myscript.awk <mydata.txt 3>myresult.sh
source myresult.sh
echo "SUM=${SUM} COUNT=${COUNT}"

暫無
暫無

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

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