Si j'utilise des guillemets simples pour inclure l'instruction d'action awk, cela fonctionne comme prévu:
$ 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
Mais si j'utilise des guillemets doubles pour les entourer, il imprime la ligne entière au lieu de la colonne / du champ particulier:
$ 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
Pourquoi en est-il ainsi? Pourquoi l'utilisation de guillemets doubles pour entourer les instructions d'action awk produit-elle des résultats différents que lorsque vous utilisez des guillemets simples pour les entourer? Puis-je faire quelque chose pour que la mise en boîte avec des guillemets doubles fonctionne comme la mise en boîte avec des guillemets simples?
command-line
awk
Aditya
la source
la source
awk
devraient être à l'intérieur{ ... }
.awk 'condition1{action1} condition2 {action2}'
. Si nous donnons la commande awk comme ceciawk '{print $1}'
, cela signifie qu'aucune condition n'est donnée.awk {'print $2'}
était fausse. J'ai dit qu'il valait mieux éviter les guillemets simples entre accolades, car cela vous embrouillerait.Réponses:
Si vous utilisez des guillemets doubles, le
$2
obtient remplacé par le shell avantawk
est appelé. Comme$2
c'est généralement vide en cours d'exécutionéquivaut à courir
Utilisation
si vous souhaitez utiliser des guillemets doubles.
la source
$2
être développé? (Depuis, j'essaie d'apprendre des choses, j'aimerais comprendre ce qui se passe) :)$2
?$2
est généralement une variable d'environnement vide