変数の代入やシェルのawkでの使用方法
http:// blog.jcix.top/2017-03-30/shell_awk_variables/
目次 [ 倍 ]
ライトシェルスクリプトのテキストを処理する際、多くの場合、シェルのawkコマンドを一致させるために使用されます。しかし、中括弧で二つの世界のようなルックスをawkはシェル。本論文では、AWKとシェル変数の変化を利用を達成するために、(著者が制限され、複雑な5月以降のサプリメント)を理解する唯一の最も簡単な方法を説明します。
我々はawk言語の機能、またはパッケージのようになるならば、あなたは外部変数を使用するか、変更したい、問題は、実際に出力の入力パラメータと戻り値です。使用シェル変数の場合、実際には、シェル変数AWKの引数かの問題として、シェルのawkの変数の割り当てのためには、awkは出力値のリターンとして見ることができます。
シェル変数はawkの使用
渡されたパラメータawkのオプションは-v [awk_var=$SHELL_VAR]
、それが囲まれたメインのawkプログラムの前に「」を追加する必要があります。
1つのサンプルスクリプト:
1
2
3
4
5
|
#!/bin/bash
VAR1="~~~!"
echo hello, world|awk -v awk_var1=$VAR1 '{ print $1, "shell", $2, awk_var1 }'
|
出力:
1
2
|
hello, shell world ~~~!
|
シェルawkの変数の割り当てへ
単一の変数
今、シェル変数の割り当てにawkのために、それは、awkの出力値のリターンとして見ることができます。単一の変数の復帰のために、あなたはシェルのバッククォート構文を使用することができます。結果バッククォートの値は、 `コマンドは、変数に代入保存することができる、当然のコマンドもawkのこと。
サンプルスクリプト2:
1
2
3
4
5
6
|
#!/bin/bash
VAR1="~~~!"
VAR2=`echo hello, world|awk -v awk_var1=$VAR1 '{ print $1, "shell", $2, awk_var1 }'`
echo $VAR2
|
出力:
1
2
|
hello, shell world ~~~!
|
複数の変数
複数の変数の代入のために、私たちは簡単にする必要が使用するためにevalコマンドを説明し、それがパラメータとしてシェルコマンドを実行するためにevalコマンドです、例えば:
サンプルスクリプト3:
1
2
3
4
|
#!/bin/bash
eval VAR1=hello;VAR2=world
echo $VAR1, $VAR2
|
出力:
1
2
|
hello, world
|
しかし、「evalの」せずに上記のスクリプトでは、結果は同じで、違いは何ですか?個人的な理解は、各コマンドスクリプトの実装に遭遇必ずしも同じ状況ならば、我々は唯一のスクリプトで文字列を実行し、その後のevalコマンドを達成することができると組み合わせるrawコマンドのマイナーな費用を必要としています。
VAR2 = 321; VAR3 = 111 AWKプログラムの詳細、我々は「中間プログラム」などのコマンド文字列AWKを生成することができ、次いで、今問題となっている対応する多変数の割り当ては、実際には= 123 VAR1」類似を生成することですの「この文字列。
だから、ここが、それは、多変数の割り当てであるが、実際には まだ言及した一方向出力変数以上使用していますが、これは、単一の変数は文字列変数である-シェルコマンドを含む文字列 。あなたは、例を参照してください〜それは良い一口ああだと思うかもしれません。
4サンプルスクリプト:
1
2
3
4
5
6
7
|
#!/bin/bash
eval `echo hello welcome to the shell world | awk '{
printf("VAR1=%s; VAR2=%s", $1, $6)
}'`
echo $VAR1, $VAR2
|
出力:
1
2
|
hello, world
|
[何がbashで「evalの」コマンドである?] http://unix.stackexchange.com/questions/23111/what-is-the-eval-command-in-bash
[AWKコールSHELL、および変数はシェルに渡さ] http://smilejay.com/2014/01/awk-call-shell/