Kemungkinan Duplikat:
Gunakan parameter skrip di awk
Saya memiliki skrip, di mana cuplikan skripnya
x=3
awk '$2=$x{print $1}' infile
variabel eksternal adalah x,
tapi itu meminta kesalahan dalam awk
jadi dalam situasi ini, bagaimana membuat awk berjalan dengan sukses?
terima kasih!
Jawaban yang Diterima:
Variabel shell hanya itu:a shell variabel . Jika Anda ingin mengubahnya menjadi awk variabel, Anda memerlukan sintaks seperti:
awk -v x="$x" '$2 == x {print $1}' infile
atau
awk '$2 == x {print $1}' x="$x" infile
Namun, mereka mengalami masalah:urutan pelarian diperluas di dalamnya (dan dengan GNU awk
4.2 atau lebih tinggi, jika $x
dimulai dengan @/
dan diakhiri dengan /
, ini diperlakukan sebagai jenis variabel regexp).
Jadi, misalnya jika variabel shell berisi dua karakter backslash dan n , variabel awk akan berakhir dengan baris baru karakter (dan dengan gawk 4.2+, jika mengandung @/foo/
, variabel awk akan berisi foo
dan bertipe regexp
).
Pendekatan lain (tetapi yang membutuhkan POSIX awk atau nawk (sebagai lawan dari awk asli yang masih ditemukan pada beberapa Unices yang aneh)) adalah dengan menggunakan variabel lingkungan:
x="$x" awk '$2 == ENVIRON["x"] {print $1}' infile
Pendekatan lain (masih dengan awks yang lebih baru) adalah dengan menggunakan array ARGV di awk:
awk 'BEGIN {x = ARGV[1]; delete ARGV[1]}
$2 == x {print $1}' "$x" infile