为什么awk打印整行而不是第一个字段?

时间:2012-02-18 01:12:09

标签: shell awk

我正在努力学习使用awk,但这并不符合我的预期。这是我的麻烦:

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

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

3 个答案:

答案 0 :(得分:26)

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

要阻止Bash执行此操作,请将AWK程序用单引号而不是双引号括起来:

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

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

答案 1 :(得分:7)

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

在awk程序周围使用单引号,否则$ 1会被转换为shell变量$ 1

答案 2 :(得分:-1)

要打印整行,请运行以下 shell 命令:

echo "Hi, this is my first answer on stackoverflow" | awk '{ print $0 }'

输出:

Hi, this is my first answer on stackoverflow