我试图学会使用awk
,但它不符合我的期望。这是我的麻烦:为什么awk会打印整行而不是第一个字段?
$ echo "Hello brave new world" | awk "{print $1}"
Hello brave new world
我希望看到“你好”,因为这是第一个字段。为什么不把这些空格当作字段分隔符?
我试图学会使用awk
,但它不符合我的期望。这是我的麻烦:为什么awk会打印整行而不是第一个字段?
$ echo "Hello brave new world" | awk "{print $1}"
Hello brave new world
我希望看到“你好”,因为这是第一个字段。为什么不把这些空格当作字段分隔符?
这是因为Bash将$1
解释为引用第一个shell参数,所以它将其值替换为它。因为,在你的情况下,该参数未设置,$1
只是被替换为空字符串;所以你的AWK程序实际上只是{print }
,它打印整条线。
echo "Hello brave new world" | awk '{print $1}'
或
echo 'Hello brave new world' | awk '{print $1}'
echo "Hello brave new world" | awk '{print $1}'
周围使用awk程序单引号:
为了防止猛砸从这样做,在单引号代替双引号包住你的AWK程序,否则$ 1被翻译为shell变量$ 1
所以,你已经学习了比awk编程更多的关于shell编程的知识;到目前为止的答案是现货。始终在脚本中使用单引号 - 除非有非常有说服力的理由。 – 2012-02-18 01:25:42