GNU/Linux >> Belajar Linux >  >> Linux

Variabel Eksternal Dalam Awk?

Pertanyaan ini sudah memiliki jawaban di sini :Tutup 8 tahun yang lalu.

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

Linux
  1. Skrip bash(I)

  2. Bagaimana Melakukan Evaluasi Variabel Tidak Langsung?

  3. $path Variabel Env Variabel?

  1. Gunakan awk untuk menghitung frekuensi huruf

  2. 4 Contoh Pernyataan Awk If ( if, if else, if else if, :? )

  3. chmod drive eksternal yang baru dipasang untuk mengatur akses penulisan

  1. Panduan praktis untuk belajar awk

  2. Panduan pemula untuk melongo

  3. `$?` ? Apakah Itu Variabel?