我不知道这是否是 awk 的一个功能,但如果我使用 awk 程序文件并使用$0
vs如果我在.$1
-f
bash command line
获取以下测试文件:
a b c , e,f
a b c , e,f
a b c , e,f
a b c , e,f
a b c , e,f
a,bc, x
当我在 bash 命令行上使用以下命令时:
awk "{ print $1 }" sample_input.txt
我得到以下输出:
a b c , e,f
a b c , e,f
a b c , e,f
a b c , e,f
a b c , e,f
a,bc, x
如您所见,这是 $0 而不是 $1 的输出。$0 只输出空行。
现在,当我在 awk 命令中使用相同的命令时,我得到了正确的输出:
{ print $1 }
awk -f test.awk sample_input.txt
a
a
a
a
a
a,bc,
我正在使用 Ubuntu 18.04。这是一些奇怪的功能awk
吗?
这不是一个奇怪的特性,
awk
而是由于 shell 处理双引号中的变量的普通方式。在命令中
由于
awk
代码被双引号引起来,shell 将替换$1
为第一个位置参数的值(通常是给脚本或 shell 函数的第一个命令行参数)。如果此值为空或未设置,则您的awk
脚本将变为具有相同的效果
为了防止外壳扩展
$1
,单引号awk
脚本:POSIX 标准描述了 shell 关于双引号和单引号的行为:
(https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_02_02)