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

很明显,为了解决awk设计上与shell的设计的冲突,一些奇怪的更天书的东西被引进了….