
add.awk
関数を含むawkファイルがありますadd(num1,num2)
。コマンドラインから入力を受けたいです。
#!/bin/awk -f
function add(num1,num2)
{
print $num1 + $num2
}
BEGIN {
add($1,$2)
}
ただし、次のようにadd.awkファイルを実行しようとすると:
./add.awk 5,6
常に値0を印刷します。
入力の指定方法に問題がありますか?
答え1
いろんな問題があると思います。
まず、私が知っている限り、ブロック内ではコマンドラインパラメータを使用できません$1
。ただし、少なくともGNU awkでは配列を介してアクセスできます(カンマで区切るのではなくスペースで区切る必要があります)。$2
BEGIN
ARGV
第二に、内部変数の逆参照構文ではnum1
ありません$num1
。
だからあなたはできます
#!/usr/bin/awk -f
function add(num1,num2)
{
print num1 + num2
}
BEGIN {
add(ARGV[1],ARGV[2])
}
それから電話してください
$ ./add.awk 5 6
11
本当に使用するには、内部的に配列に分割する./add.awk 5,6
必要があります。ARGV[1]
#!/usr/bin/awk -f
function add(num1,num2)
{
print num1 + num2
}
BEGIN {
split(ARGV[1],a,",");
add(a[1],a[2])
}
$ ./add.awk 5,6
11
答え2
awkは入力ストリームから読み取っていますが、何もないのでゼロを印刷します。
スクリプトに入力を提供するには、次を使用できます。
echo 5 6 | awk '{ print $1 + $2}'