$ 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}'
这篇博客探讨了在awk命令中如何引用和处理shell的外部变量,特别是涉及空格和特殊字符时的解析问题。通过示例解释了如何使用awk处理包含空格的字符串,并展示了如何避免IFS导致的错误。文章还介绍了在for循环中调用awk并引用外部变量$i的正确方式,强调了在awk脚本中引用外部变量时的注意事项。

6305

被折叠的 条评论
为什么被折叠?



