次のような「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変数をn
csh変数と同じ値に設定します$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に切り替えてみてください。