3
awk -F "|" 'function decToBin(dec) { printf "ibase=10; obase=2; $dec" | bc; } BEGIN {print $3" "$4" "$5" "$6" "$7" "decToBin($8)}' $Input

ここで、入力はファイルへのパスです

1|2|1.00|0.46|0.44|1.12|49.88|3
2|2|1.00|0.45|0.55|1.13|50.12|11

関数呼び出しなしで正しく動作していましたが、関数 decToBin() を導入した後、エラーが発生します。次のようにエラーが発生します

awk: fatal: expression for `|' redirection has null string value

行き詰まった 方法がわからない 助けが必要

4

2 に答える 2

3

myawkscript.awk:

function decToBin(dec) {
    cmd="echo 'ibase=10; obase=2;" dec ";'|bc";
    cmd|getline var
    return var
}

//{print $3" "$4" "$5" "$6" "$7" "decToBin($8)}

それで

gawk -F"|" -f myawkscript.awk myfile

あなたにあげる

1.00 0.46 0.44 1.12 49.88 11
1.00 0.45 0.55 1.13 50.12 1011

予想通り

于 2013-05-29T07:15:47.407 に答える
1

これはうまくいきません。bcコマンドの名前ではなく、変数の名前として解釈されます (awk はシェルのように動作しません)。変数は未定義であるため、空文字列として扱われます。コマンド名を引用符で囲む必要があります。

$ awk 'BEGIN {printf "1+1\n" | "bc"}' /dev/null
2

また、$decは の値ではなく、フィールド番号 decdecの値です。繰り返しますが、awk はシェルではありません。あなたはむしろそれを次のようにしたいのです:

$ awk 'BEGIN {dec = 21; printf "%d+%d\n", dec, dec | "bc"}' /dev/null
42
于 2013-05-29T07:00:31.277 に答える