awk如何向shell傳值


今天寫腳本,遇到awk腳本向shell傳參的情況,上網谷歌一下,發現都有些麻煩,通過管道,通過eval,感覺都很復雜。於是想到用read來試一下。

首先構造一個測試文件test.txt,里面的內容是1 2 3。

一開始嘗試 

awk '{print $1 $2 $3}' test.txt | read a b c

可是echo $a,發現為空,失敗了。

試了下

echo "1 2 3" | read a b c

也無法給a b c 賦值

看來read不是這樣用的,怒谷歌之,在stackoverflow找到一個類似的問題(stackoverflow真神器啊!)

鏈接:http://stackoverflow.com/questions/374687/why-is-echo-foo-read-a-echo-a-not-working-as-expected

里面有答主提到,

read a < <(echo foo)

可以對a賦值,試了一下,果然可以。

然后嘗試

read a b c< <(echo foo goo hoo)

也可以分別對a b c進行賦值!太激動了!

之后嘗試

read a b c< <(awk '{print $1 $2 $3}' test.txt)

失敗了,a的值變成了123,b,c為空。

這是為什么?因為awk沒有打印空格,只打印123,理所當然都賦給a了。

所以,加上分隔符

read a b c< <(awk '{print $1 " " $2 " " $3}' test.txt)

這下就成功了!

考慮到我的awk還要更復雜一些,再做些改造

read a b c< <(grep 1 test.txt | awk '{test=$1;test2=$2;test3=$3}END{print test,test2,test3}')

也成功了!

所以,awk可以通過這樣的方式向shell傳值。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM