標籤:awk 指令碼 編程
【著作權聲明:轉載請保留出處:blog.csdn.net/gentleliu。Mail:shallnew at 163 dot com】
由於awk經常在shell指令碼中使用,所以shell指令碼中的有些變數要傳遞到awk中使用,這一節就說一下awk引用shell中的變數方法。
為避免螢幕輸出太多東西,我們先將被操作檔案該為一行,如下:
# catgroup_file3
vboxusers:x:984:allen
1、 檔案名稱之前傳遞變數。
格式如下:awk ‘{print var1, var2}‘ var1=aaa var2=bbb filename
#!/bin/sh shell_var="test"awk '{printvar}' var=$shell_var group_file3
輸出結果為:
#./61_awk_var.shtest
這裡變數賦值要放在檔案名稱之前,否則變數值會取不到。比如如果指令碼這樣寫不會輸出變數值。
#!/bin/sh shell_var="test"awk '{print var}'group_file3 var=$shell_var
其實這種方法在BEGIN中無法使用變數,比如這樣寫指令碼:
#!/bin/sh shell_var="test" awk 'BEGIN{ print "begin output var:" var}{ print var}END{ print "end output var:" var} 'var=$shell_var group_file3
輸出結果為:
#./64_awk_var.shbegin outputvar:testend outputvar:test
2、 使用-v傳遞變數。
格式如下:awk -v var=$shell_var ‘{print var}‘ filename
#!/bin/sh shell_var="test"awk -vvar=$shell_var '{print var}' group_file3
再試試該值在BEGIN中是否可以使用:
#!/bin/sh shell_var="test" awk -vvar=$shell_var 'BEGIN{ print"begin output var:" var}{ print var}END{ print "end output var:" var} ' group_file3
執行結果:
#./63_awk_var.shbegin outputvar:testtestend outputvar:test
這種方法傳遞的變數在BEGIN可以使用。
3、 直接使用shell變數。
格式如下:awk ‘{print "‘$shell_var‘"}‘ filename,注意:先用雙引號,再用單引號。
#!/bin/sh var="test" awk 'BEGIN{ print "begin outputvar:" "'$var'"}{ print "'$var'"}END{ print "end outputvar:" "'$var'"} ' group_file3
執行結果:
# ./65_awk_var.sh begin output var:testtestend output var:test
變數傳遞不但可以傳遞自訂變數,還可以傳遞環境變數,用法同自訂變數類似。。
shell文本過濾編程(七):awk之變數傳遞