一行不解的awk代码
分享下面这个脚本(不是我写的, 我看到的). 这是awk非常入门的用法, 我awk水平也很低. 但对我来说, 这个写法却很聪明, 有新意.
下面这行是个完整的脚本, 用于进制转换
echo |awk "{printf(\"%$2\n\",$1)}"
- 第一个问题是, echo的作用是什么? echo的作用是, 告诉awk, 不用等待输入了, 没有的, 因为它什么也没输出. 因此上面这个脚本也可以不要echo, 可以这么写
awk "BEGIN {printf(\"%$2\n\",$1)}"
- 第二个问题是, 这里
$1
和$2
显然是作为shell script的输入, 但这两个变量在awk中本身也有含义, 怎么回事? 原因很简单, 注意到一个细节, awk通常是用single quote, 这里用的却是double quote, 并不是想怎样都可以, 这里为了用shell script的参数, 必须用double quote, 这样才会发生变量展开. 因此在awk执行之前, 就已经被替换为参数了.