$ str=hello
$ awk '{print "'$str'"}'
awk的执行原理是,命令中单引号' '引起来防止shell对其进行解释
解释上述命令
首先:这里awk '{print " ' 到这里shell 不会解释
然后:$str shell解释其内容 即为:hello
最后:' "}'
shell解释完后变成:awk {print " hello "} file
再来一个看起来更加难得:
$ str=hello world
$ awk '{print "'"$str"'"}'
为啥又多了一个双引号呢?
如果我们的str为hello world ,在解释前一部分:当shell读到hello和world中间的空格时,认为这是IFS,于是,把他们放在于不同的域中,这样解释成了:
awk BEGIN{print "hello
world"}两部分
避免上述错误,我们需要修改我们的代码: awk '{print "'"$str"'"}'
问题:看不懂下面的代码
学习以上内容后看懂la~~~
为了看懂下面的代码,需要知道怎样引用awk的外部变量
for((i=2;i<=a;i++)); do sed '1,2d' 3_sOTU/table_filtered.xls | awk -F "\t" 'BEGIN{sum=0}{sum+=$"'"$i"'"}END{print sum}'; done | sort -n | head -1
其中这一块有关awk中引用外部变量的方法:引用外部变量$i
awk -F "\t" 'BEGIN{sum=0}{sum+=$"'"$i"'"}END{print sum}'