回答:
単一引用符は展開を禁止します。それらを切り替えます。
awk ... '...'"$foo"'...' ...
foo
はawkスクリプトの断片になります-しかし、それが質問にどのように答えるかわかりません。@ mattm123:あなたが何をしようとしているのか正確にはわかりませんが、シェル変数の内容をawkの文字列として使用することを考えている場合は、デニスの答えを参照してください。
$foo
、サニタイズされていない値を含めることができると、スクリプトがひどく台無しになる可能性があることは正しいです。
awk '$1=='"$foo"'{print $3}'
に$foo
評価されるとどうなるかを考えてくださいz{next} {print "garbage"} 0
。また$foo
、通常の文字列が含まれる通常の場合でも、スクリプトが"
それを囲むようにする必要があります。デニスの答えは、これを行う正しい方法を示しています。
これを行う正しい方法は、AWKの変数受け渡し機能を使用することです。また、おそらくOFS
一度だけ設定する必要があるため、BEGIN
句で設定する必要があります。
awk -F $'\xE7' -v awkvar="$shellvar" 'BEGIN {OFS ="¬"} { $3 = sprintf("%010s". $3) ; print $0, awkvar }' input file > outputfile
次の-v
設定にも使用できますOFS
。
awk -F $'\xE7' -v awkvar="$shellvar" -v OFS ="¬" '{ $3 = sprintf("%010s". $3) ; print $0, awkvar }' input file > outputfile
print
あなたがそれをどのように使用したいかを正確に知らなかったため、変数をステートメントに追加しました。
awkvar="$shellvar"
単純なコマンドの5番目の単語です。引用符awkvar=$shellvar
がないと、通常どおりフィールド分割とパス名展開が行われます。
awkにはENVIRON
、環境にアクセスするための配列があります。
$ FOO=bar awk 'BEGIN{print ENVIRON["FOO"]}'
bar
-v
一般的な解決策として推奨される手法です。
foo
二重引用符で囲まれたの値をawkスクリプトの一部として扱います。$foo
二重引用符またはバックスラッシュが含まれている場合、すべての地獄が崩れる可能性があります。動作するソリューションについては、デニスの答えを参照してください。