awkの$とシェルの$の違いは何ですか?

awkの$とシェルの$の違いは何ですか?

awkは$(パターンベース)で区切られた一致する行の内容を抽出するために使用されます。IFS

awk `/LIG/{print $1, $2}' topol.top

シェルは、$変数の保存された値を抽出するために使用します。例えば。forリングの形。

for i in *; do
    mv -- $i $i.pdb; done 

(回答に応じて修正)

これら2つのケースの使用法は本質的に$同じですか、それとも違うのですか?

違うとなぜ違いがあるのでしょうか? awkとシェルを混ぜるには$

ベストアンサー1

$シェルと$awkでは、時にはシェルの後ろに数字があり、時には変数があるため関連があるようです。$awkでも同じですが、何の関係もありません。 2つのまったく異なるコンテキストで同じ文字を使用する2つはまったく異なります。ツールはawkとシェルでまったく異なる意味を$<number>持ちます。$<variable>

シェルでは、変数を前に追加して逆参照でき、$位置パラメータなどはこの点で変数と同じように処理されるため、次のことができます。

$0 = the path to the current command
$1 = the first argument passed to the command
$2 = the second argument passed to the command
$# = the number of arguments passed to the command
$? = the exit status of the last command run
$var = the value of the shell variable var
etc.

awk では$(概念的に) 現在のレコードが分割されるフィールド配列の名前なので、次のことができます。ただ$次の表現に使用されます。

$0 = the current record being processed
$1 = the first field of the current record
$2 = the second field of the current record

awk変数を逆参照するには、Cと同様にvarその名前を使用しますvar。実際、awk構文はシェルよりもCにはるかに似ています。

awkで使用されているものを見た場合は、逆参照ではなく名前だけで逆参照し、$var数値(例えば)がある場合は現在のレコードの5番目のフィールドと同じであることを意味し、値がまったくない場合は現在のレコードと同じであることを意味します。$varvarvarvar5$var$5var$var$0

var=0 => $var = $0 = the current record being processed
var=1 => $var = $1 = the first field of the current record
var=2 => $var = $2 = the second field of the current record
var="" => $var = $0 = the current record being processed
var="foo" => $var = $0 = the current record being processed

AwkとShellは、独自の構文、意味、変数の範囲などを備えた2つの完全に異なるツールです。したがって、それらをそのまま扱い、awkスクリプトで見たものがawkスクリプトで見たものと関係があると仮定しないでください。シェルスクリプトの構文、意味、範囲、またはその逆。

おすすめ記事