Semua, saya punya string dari mana saya ingin mengekstraksi substring. Masalahnya adalah bahwa posisi awal disimpan dalam variabel. AWK Sepertinya tidak mengenali variabel.
Ini kodenya
str="This is a test"
s1="is"
i=$(awk -v a="$str" -v b="$s1" 'BEGIN{print index(a,b)}')
echo "$str" | awk '{print substr($0,$i)}'
Tetapi ini tidak berhasil. Bagaimana memaksa awk untuk mengenali i
?
Mengapa tidak melakukan semua proses dalam satu permintaan awk?
Jika Anda membutuhkan skrip shell Anda untuk juga melihat nilai
i
, Anda bisa menambahkan> "/dev/tty"
ke akhirprint
perintah di atas, lalu menambahkan baris lain yang mengatakan hanyaprint i
tanpa redirect, kemudian bungkus seluruhprintf ... | awk ...
baris dalam sebuahi=$(...)
konstruk.sumber
Jawaban langsung ke pertanyaan awal: dengan menghindari tanda kutip dan membiarkan shell memperluas variabel:
Jika diduga bahwa variabel tersebut mungkin berisi ruang kosong dan hal-hal lain dan seseorang ingin itu diperlakukan sebagai string dalam awk, seseorang hanya dapat menggunakan lebih banyak tanda kutip:
... tapi seseorang sering melakukan sesuatu yang kurang optimal jika sampai pada ini :-).
sumber