O variabilă shell este doar aceea: a shell variabilă . Dacă doriți să o transformați într-o variabilă awk , aveți nevoie de o sintaxă precum:
awk -v x="$x" "$2 == x {print $1}" infile
sau
awk "$2 == x {print $1}" x="$x" infile
Cu toate acestea, cei suferă de o problemă: secvențele de evadare sunt extinse în ele (și cu GNU awk
4.2 sau mai sus, dacă $x
începe cu @/
și se termină cu /
, este tratată ca un tip de variabilă regexp ).
Deci, de exemplu, dacă variabila shell conține cele două caractere backslash și n , variabila awk va ajunge să conțină caracterul newline (și cu gawk 4.2+, dacă conține @/foo/
, variabila awk va conține foo
și să fie de tip regexp
).
O altă abordare (dar care necesită un POSIX awk sau nawk ( spre deosebire de originalul awk, încă găsit pe câteva Unice ciudate)) este utilizarea variabilelor de mediu:
O altă abordare (încă cu awks mai noi) este utilizarea matricei ARGV în awk:
awk "BEGIN {x = ARGV[1]; delete ARGV[1]} $2 == x {print $1}" "$x" infile
Comentarii
Nu puteți utiliza variabile externe în awk
direct, trebuie să le importați mai întâi ca variabile awk
.
x=3 awk -v foo="$x" "$2=foo{print $1}" infile