シェルスクリプトでawkと変数を使用する

シェルスクリプトでawkと変数を使用する

次のような「random」というファイルがあります。

A B C D
A B C D
A B C D

このシェルスクリプトに2番目の列を印刷させるにはどうすればよいですか?

#! /usr/bin/tcsh -f

set variable = "2"
awk '{print "$""'"$variable"'" }' random

それは以下を提供します:

$2
$2
$2
$2
$2

$ 2を次のようにハードコードすると:

#! /usr/bin/tcsh -f

awk '{print $2 }' random

わかりました。

B
B
B

ただし、毎回異なる値を設定する必要があるため、ハードコーディングはオプションではありません。

ベストアンサー1

awkのoptionsを使用して変数をawkに渡します-v。たとえば、awk変数をncsh変数と同じ値に設定します$variable

% set variable=2
% awk -v n="$variable" '{print $n}' random
B
B
B

または、スクリプトの後に変数の代入を引数として渡します(awkは引数をx=yファイル名ではなく代入として解釈します)。

% set variable=4
% awk '{print $n}' n="$variable" random
D
D
D

どちらの場合も、awkスクリプトはそれを$n「フィールド番号n」と解釈します。

あるいは、環境変数を使用することもできます。 awkは配列を介してアクセスできますENVIRON。例えば

% setenv variable 2
% awk '{print $ENVIRON["variable"]}' random
B
B
B

ところで、他の人がコメントで述べたように、csh/tcshスクリプト言語では良い選択ではありません。シェルスクリプトを作成するには、Bourne などのシェルを使用します。 tcshインタラクティブシェルはまだ大丈夫ですが、他のシェルがまだ提供していないものは提供しません。 cshは1980年代には優れたインタラクティブシェルでしたが、他のシェルは長い間これを上回りました(そしてcshには欠点もあります。 kshまたはzshに切り替えてみてください。

おすすめ記事