Если я использую одинарные кавычки для включения оператора действия awk, он будет работать как положено:
$ 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 дает результаты, отличные от использования одинарных кавычек для их заключения? Могу ли я сделать что-то, чтобы заключение в двойные кавычки работало так же, как вхождение в одинарные кавычки?
Попробуйте использовать одинарные кавычки за пределами фигурных скобок.
—
Авинаш Радж
@AvinashRaj Это приведет к синтаксической ошибке, все операторы действия
—
Адитья
awk
должны быть внутри { ... }
.
кто сказал, что это создаст синтаксическую ошибку? Awk Sysntax будет так
—
Авинаш Радж
awk 'condition1{action1} condition2 {action2}'
. Если мы дадим команду awk, как это, это awk '{print $1}'
означает, что условия не заданы.
я не говорил, что твоя команда
—
Авинаш Радж
awk {'print $2'}
неверна. Я сказал, что было бы лучше избегать одинарных кавычек внутри фигурных скобок, потому что это вас запутает.
@AvinashRaj Ох .. Я думал, ты имел в виду что-то еще.
—
Адитья