我正在努力学习使用awk
,但这并不符合我的预期。这是我的麻烦:
$ echo "Hello brave new world" | awk "{print $1}"
Hello brave new world
我希望看到“你好”,因为这是第一个字段。为什么空格不算作字段分隔符?
答案 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