如果我使用单引号将awk的action语句括起来,它将按预期工作:
$ dpkg -l | grep "linux\-[a-z]*\-" | awk {'print $2'}
linux-headers-3.13.0-27
linux-headers-3.13.0-27-generic
linux-headers-3.14.4-031404
linux-headers-3.14.4-031404-generic
linux-headers-generic
linux-image-3.13.0-27-generic
linux-image-3.14.4-031404-generic
linux-image-extra-3.13.0-27-generic
linux-image-generic
linux-libc-dev:i386
linux-sound-base
但是,如果我使用双引号将其引起来,它将打印整行而不是特定的列/字段:
$ dpkg -l | grep "linux\-[a-z]*\-" | awk {"print $2"}
ii linux-headers-3.13.0-27 3.13.0-27.50 all Header files related to Linux kernel version 3.13.0
ii linux-headers-3.13.0-27-generic 3.13.0-27.50 i386 Linux kernel headers for version 3.13.0 on 32 bit x86 SMP
ii linux-headers-3.14.4-031404 3.14.4-031404.201405130853 all Header files related to Linux kernel version 3.14.4
ii linux-headers-3.14.4-031404-generic 3.14.4-031404.201405130853 i386 Linux kernel headers for version 3.14.4 on 32 bit x86 SMP
ii linux-headers-generic 3.13.0.27.33 i386 Generic Linux kernel headers
ii linux-image-3.13.0-27-generic 3.13.0-27.50 i386 Linux kernel image for version 3.13.0 on 32 bit x86 SMP
ii linux-image-3.14.4-031404-generic 3.14.4-031404.201405130853 i386 Linux kernel image for version 3.14.4 on 32 bit x86 SMP
ii linux-image-extra-3.13.0-27-generic 3.13.0-27.50 i386 Linux kernel extra modules for version 3.13.0 on 32 bit x86 SMP
ii linux-image-generic 3.13.0.27.33 i386 Generic Linux kernel image
ii linux-libc-dev:i386 3.13.0-27.50 i386 Linux Kernel Headers for development
ii linux-sound-base 1.0.25+dfsg-0ubuntu4 all base package for ALSA and OSS sound systems
为什么会这样呢?为什么使用双引号将awk的动作语句括起来与使用单引号将它们括起来相比会产生不同的结果?我可以做些什么,以便使用双引号将其括起来与使用单引号将其括起来吗?
尝试在花括号外使用单引号。
—
Avinash Raj
@AvinashRaj会产生语法错误,其中的所有动作语句
—
Aditya 2014年
awk
都应在内{ ... }
。
谁说会产生语法错误?Awk sysntax应该是这样的
—
Avinash Raj
awk 'condition1{action1} condition2 {action2}'
。如果我们这样给出awk命令awk '{print $1}'
,则意味着没有条件。
我不是说你的命令
—
Avinash Raj
awk {'print $2'}
是错误的。我说过,最好避免在括号内使用单引号,因为这会使您感到困惑。
@AvinashRaj哦..我还以为你是别的意思。
—
Aditya 2014年