Wenn ich einfache Anführungszeichen verwende, um die Aktionsanweisung von awk einzuschließen, funktioniert dies wie erwartet:
$ 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
Wenn ich sie jedoch in doppelte Anführungszeichen setze, wird die gesamte Zeile anstelle der jeweiligen Spalte / des Felds gedruckt:
$ 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
Wieso ist es so? Warum führt die Verwendung von doppelten Anführungszeichen zum Einschließen der Aktionsanweisungen von awk zu anderen Ergebnissen als die Verwendung von einfachen Anführungszeichen zum Einschließen? Kann ich etwas tun, damit das Einschließen mit doppelten Anführungszeichen wie das Einschließen mit einfachen Anführungszeichen funktioniert?
command-line
awk
Aditya
quelle
quelle
awk
sollten innerhalb sein{ ... }
.awk 'condition1{action1} condition2 {action2}'
. Wenn wir den Befehl awk so geben,awk '{print $1}'
bedeutet dies , dass keine Bedingung gegeben ist.awk {'print $2'}
falsch ist. Ich sagte, es wäre besser, einfache Anführungszeichen in geschweiften Klammern zu vermeiden, da dies Sie verwirren würde.Antworten:
Wenn Sie doppelte Anführungszeichen verwenden,
$2
wird das zuvor durch die Shell ersetzteawk
aufgerufen. Da$2
läuft normalerweise leerist das gleiche wie laufen
Verwenden
Wenn Sie doppelte Anführungszeichen verwenden möchten.
quelle
$2
um erweitert zu werden? (Da ich versuche, Dinge zu lernen, möchte ich verstehen, was passiert) :)$2
?$2
ist normalerweise eine leere Umgebungsvariable