Válasz
A héjváltozó éppen ilyen: a shell változó . Ha azt szeretné, hogy awk változóvá váljon, akkor szüksége van egy szintaxisra, például:
awk -v x="$x" "$2 == x {print $1}" infile
vagy
awk "$2 == x {print $1}" x="$x" infile
Azok azonban problémát szenvednek: a menekülési szekvenciák kibővülnek bennük (és a GNU awk 4.2 vagy újabb verzióival ha $x @/ -vel kezdődik és /, a regexp változótípusként kezeljük ).
Tehát például, ha a shell változó a két karaktert visszavágó és tartalmazza n az awk változó végül az newline karaktert fogja tartalmazni (és a gawk 4.2+ verzióval, ha @/foo/ -t tartalmaz, akkor az awk változó tartalmazza a foo -t, és regexp típusú legyen.
Másik megközelítés (de ehhez POSIX awk vagy nawk szükséges ( ellentétben az eredeti awk-val, amely még mindig megtalálható néhány páratlan Unicel)) környezeti változók használata: 79110249a “>
Egy másik megközelítés (még mindig újabb awk-kkel) az ARGV tömb használata awk-ban:
awk "BEGIN {x = ARGV[1]; delete ARGV[1]} $2 == x {print $1}" "$x" infile
Megjegyzések
Válasz
Külső változókat nem használhat a awk közvetlenül, először awk változóként kell importálni őket.
x=3 awk -v foo="$x" "$2=foo{print $1}" infile
ARGVvalójában POSIX szolgáltatás, ' s csak másképp definiálva itt:gawk.ARGV, mind aENVIRONvannak POSIX-osok, de nincsenek az eredeti awk-ban, sajnálom, ha nem voltam ' tisztában ezzel. Miben különbözik agawkfájlban?gawkismeretlen opciókat tartalmaz aARGV, míg a POSIXawknem ' t.-f-vel hívják, mint aawk -f script.awk arg1 arg2...-ben, ahol a GNU awk nem ' nem kell egy--az opciók végének megjelöléséhez, ha az arg1--vel kezdődik nem érvényes beállítás aawkadott verziójában. De ez ' nem releváns ebben az ügyben, és én biztosan nem támaszkodnék erre a viselkedésre (ennek ellenére a---et is beletenném).