Zmienna powłoki to po prostu: a shell zmienna . Jeśli chcesz przekształcić go w zmienną awk , potrzebujesz składni takiej jak:
awk -v x="$x" "$2 == x {print $1}" infile
lub
awk "$2 == x {print $1}" x="$x" infile
Jednak ci cierpią na problem: sekwencje specjalne są w nich rozwinięte (a przy GNU awk
4.2 lub nowszym, if $x
zaczyna się od @/
i kończy na /
, jest traktowany jako typ zmiennej regexp ).
Na przykład, jeśli zmienna powłoki zawiera dwa znaki lewy ukośnik i n , zmienna awk będzie zawierać znak nowej linii (aw przypadku gawk 4.2+, jeśli zawiera @/foo/
, zmienna awk będzie zawierać foo
i być typu regexp
).
Inne podejście (ale wymagające POSIX awk lub nawk ( w przeciwieństwie do oryginalnego awk, który wciąż można znaleźć w kilku nieparzystych Unikach)) jest użycie zmiennych środowiskowych:
Innym podejściem (nadal z nowszymi awksami) jest użycie tablicy ARGV w awk:
awk "BEGIN {x = ARGV[1]; delete ARGV[1]} $2 == x {print $1}" "$x" infile
Komentarze
Nie można używać zmiennych zewnętrznych w awk
bezpośrednio, musisz najpierw zaimportować je jako awk
zmienne.
x=3 awk -v foo="$x" "$2=foo{print $1}" infile