-1

私は2つの列を持っています:

100011780   100016332  
10100685    10105465      
101190948   101195542  
101286838   101288018  
101411746   101413662  
101686767   101718138  
101949793   101950504  
101989424   101993757  
102095320   102106147  
102133372   102143125

これらの数値の中間値を取得したい。
しようとしました:

awk '{print $1"\t"$2-$1}' input | awk '{print $1"\t"$2/2}' | awk '{print $1+$2}' > output

しかし、2 で除算した後のいくつかの数値はもはや自然ではなく、おそらく私の出力は次のようになります。

100014056
10103075
101193245
101287428
101412704
1.01702e+08
1.0195e+08
1.01992e+08
1.02101e+08
1.02138e+08

おそらく、非自然値を見つけて、-/+ 0.5 を自然にすることは可能でしょうか?

4

3 に答える 3

3

2 つの数値の平均を取得するために awk を 3 回呼び出す必要はありません。

awk '{printf("%d\n", ($1+$2)/2)}' input

printf()出力を制御するために使用します。

100014056
10103075
101193245
101287428
101412704
101702452
101950148
101991590
102100733
102138248
于 2012-09-18T22:18:49.150 に答える
2

このラウンド関数を AWK ファイルに追加して使用できます。

function round(x) {
    ival = int(x);

    if (ival == x)
            return x;

    if (x < 0) {
            aval = -x;
            ival = int(aval);
            fraction = aval - ival;
            if (fraction >= .5)
                    return int(x) - 1;
            else
                    return int(x);
    } else {
            fraction = x - ival;
            if (fraction >= .5)
                    return ival + 1;
            else
                    return ival;
    }
}

たとえば、平均値は次のようになります。

{print round(($1+$2)/2)}
于 2012-09-18T22:21:37.573 に答える
2

合計が不均一な場合に何が必要かわかりませんが、すべてを一度に実行できます。

gawk '{printf "%i\n", ($1 + $2) / 2}' input

あなたが探しているのは、printfのフォーマット制御オプションです。

于 2012-09-18T22:27:27.283 に答える