awk如何向shell傳值

2022-03-07 17:55:00 字數 909 閱讀 7166

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

首先構造乙個測試檔案test.txt,裡面的內容是1 2 3。

一開始嘗試 

awk '

' test.txt | read a b c

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

試了下

echo "

1 2 3

" | read a b c

也無法給a b c 賦值

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

裡面有答主提到,

read a < <(echo foo)

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

然後嘗試

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

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

之後嘗試

read a b c< <(awk '

' test.txt)

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

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

所以,加上分隔符

read a b c< <(awk '

' test.txt)

這下就成功了!

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

read a b c< <(grep 1 test.txt | awk '

end')

也成功了!

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

shell往awk傳引數

本文 記錄無限 www.gluoo.cn 今天在搞指令碼,需求是這樣的,有乙個檔案格式大概是這樣的 180 analyzer 20 job 1 需要按第一列的數值讀取這個檔案,比如第一行大於等於20的顯示出來,剛開始用的指令碼是這樣的 demo.sh bin bash threadhold 1 aw...

Shell 向shell指令碼傳參

我們可以在執行 shell 指令碼時,向指令碼傳遞引數,指令碼內獲取引數的格式為 n。n 代表乙個數字,1 為執行指令碼的第乙個引數,2 為執行指令碼的第二個引數,以此類推 傳遞到指令碼的引數個數 以下例項我們向指令碼傳遞三個引數,並分別輸出,其中 0 為執行的檔名 test.sh echo she...

向shell指令碼傳引數

執行 nano test.sh 建立乙個新的shell指令碼。指令碼test.sh的內容如下 bin sh name 1 echo the are great man 給新建立的test.sh的指令碼賦可執行許可權,命令為 chmod 755 test.sh 執行 test.sh xiao wang...