1. 程式人生 > >如何在shell腳本里傳遞一個變數給awk

如何在shell腳本里傳遞一個變數給awk

awk有時是個糾結的東西,一方面它很容易就佔用了單引號和雙引號,如果你要在什麼腳本里面呼叫awk,很輕鬆地就要跟引號的轉義進行搏鬥;
另一方面,$1 $2 ... $NF $NR,它也毫不客氣的佔用了$族的地盤。

怎麼在shell腳本里面傳遞一個變數給awk呢?

特別是想要把這個變數用作匹配的正則表示式的時候?

先說簡單的,如果是隻傳遞變數,有幾種方法:  

複製程式碼 程式碼如下: awk '{print v1, v2}' v1=$VAR1 v2=$VAR2 input_file

# 或者,這種方法不是所有的awk分支都支援  

複製程式碼 程式碼如下: awk -v v1=$VAR1 -v v2=$VAR2 '{print v1, v2}' input_file

# 或者,這種寫法是最難受的  

複製程式碼 程式碼如下: awk '{print "'"$VAR1"'", "'"$VAR2"'"}' input_file

把變數用在正則裡面的方法:  

複製程式碼 程式碼如下: awk ' $0 ~ v1; {print v2}' v1=$VAR1 v2=$VAR2 input_file

在linux系統管理中,sed與awk是兩個很強的東西,好好挖掘下吧