Si uso comillas simples para encerrar la declaración de acción de awk, funciona como se esperaba:
$ 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
Pero si uso comillas dobles para encerrarlos, imprime la línea completa en lugar de la columna / campo particular:
$ 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 es esto entonces? ¿Por qué usar comillas dobles para encerrar las declaraciones de acción de awk produce resultados diferentes que cuando se usan comillas simples para encerrarlas? ¿Puedo hacer algo para que el uso de comillas dobles funcione como el uso de comillas simples?
Intenta usar comillas simples fuera de las llaves.
—
Avinash Raj
@AvinashRaj Eso produciría un error de sintaxis, todas las declaraciones de acción
—
Aditya
awk
deberían estar dentro { ... }
.
¿Quién dice que crearía un error de sintaxis? Awk sysntax iba a ser así,
—
Avinash Raj
awk 'condition1{action1} condition2 {action2}'
. Si damos el comando awk de esta manera, awk '{print $1}'
significa que no hay ninguna condición dada.
No dije que tu comando
—
Avinash Raj
awk {'print $2'}
está mal. Dije que sería mejor evitar las comillas simples entre llaves, porque te confundirá.
@AvinashRaj Oh ... pensé que querías decir algo más.
—
Aditya