在awk中使用shell的變量shell
A="2 days ago"
B=2
C=aoa
1)
經過將shell變量賦值給awk變量的方法
awk -v format="$A" 'BEGIN{print format}'
結果:2 days ago
2)
經過shell執行命令的方式,來將變量的值傳給awk
在shell中執行的時候會將單引號中的內容做爲變量傳送給awk程序。
若是沒有單引號shell會解析meta字符({),將{print 2}解析成命令塊,所以awk會出現語法錯誤。根據此特性咱們能夠來引用shell的變量,例如
1)awk 'BEGIN{print '$B'}'用單引號將meta字符關閉,而$B被shell解析成值2,最後將BEGIN{print 2}傳給awk,從而達到引用shell變量的目的。
2)若是此處shell變量的值爲字符串,如C=aoa, awk 'BEGIN{print '$C'}',awk會認爲aoa是awk中的變量,因此輸出空;若是要輸出字符串能夠加上雙引號,如awk 'BEGIN{print "'$C'"}'將兩個雙引號分別放到先後兩組單引號中,shell傳給awk的值爲BEGIN{print "aoa"},因此輸出aoa
3)若是shell變量中包含有其餘meta字符,如A="2 days ago"(空格是meta charater),
使用awk 'BEGIN{print "'"$A"'"}'來將2 days ago中的meta charater關閉,再傳給awk
"$A"用來消除值中的meta charater,在單引號中的雙引號在進入awk後來用來將2 days ago做爲一個字符串來print
在使用system命令時,可能會有這種狀況:
awk 'BEGIN{system("date -d \"2 days aog\"")}'若是要把2 days ago換成$A,能夠用上面的方法:awk 'BEGIN{system("date -d \"'"$A"'\"")}'
總結:能夠先寫好awk語句,在須要引用變量的時候,將變量先後用單引號來分割成三部分,其中變量交給shell來處理,當$A有meta charater的時候,須要在$A外加上雙引號。