Se eu usar aspas simples para incluir a declaração de ação do awk, ela funcionará conforme o esperado:
$ 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
Mas se eu usar aspas duplas para incluí-las, ela imprimirá a linha inteira em vez da coluna / campo específico:
$ 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
Por que é tão? Por que o uso de aspas duplas para incluir as instruções de ação do awk produz resultados diferentes do que o uso de aspas simples para incluí-las? Posso fazer algo para que o fechamento usando aspas duplas funcione como o fechamento usando aspas simples?
command-line
awk
Aditya
fonte
fonte
awk
devem estar dentro{ ... }
.awk 'condition1{action1} condition2 {action2}'
,. Se dermos o comando awk assim,awk '{print $1}'
significa que não há nenhuma condição.awk {'print $2'}
está errado. Eu disse que seria melhor evitar aspas simples dentro do aparelho, porque isso vai confundir você.Respostas:
Se você usar aspas duplas, as
$2
substituições pelo shell antes serãoawk
chamadas. Como$2
geralmente está em execução vaziaé o mesmo que correr
Usar
se você quiser usar aspas duplas.
fonte
$2
foi expandido? (Uma vez que, eu estou tentando aprender coisas, eu gostaria de entender o que está acontecendo) :)$2
?$2
é normalmente uma variável de ambiente vazio