2012-02-18 48 views
16

我试图学会使用awk,但它不符合我的期望。这是我的麻烦:为什么awk会打印整行而不是第一个字段?

$ echo "Hello brave new world" | awk "{print $1}" 
Hello brave new world 

我希望看到“你好”,因为这是第一个字段。为什么不把这些空格当作字段分隔符?

+4

所以,你已经学习了比awk编程更多的关于shell编程的知识;到目前为止的答案是现货。始终在脚本中使用单引号 - 除非有非常有说服力的理由。 – 2012-02-18 01:25:42

回答

26

这是因为Bash将$1解释为引用第一个shell参数,所以它将其值替换为它。因为,在你的情况下,该参数未设置,$1只是被替换为空字符串;所以你的AWK程序实际上只是{print },它打印整条线。

echo "Hello brave new world" | awk '{print $1}' 

echo 'Hello brave new world' | awk '{print $1}' 
7
echo "Hello brave new world" | awk '{print $1}' 

周围使用awk程序单引号:

为了防止猛砸从这样做,在单引号代替双引号包住你的AWK程序,否则$ 1被翻译为shell变量$ 1

相关问题