awk数学-获取自然数

awk数学-获取自然数,awk,Awk,我有两个专栏: 100011780 100016332 10100685 10105465 101190948 101195542 101286838 101288018 101411746 101413662 101686767 101718138 101949793 101950504 101989424 101993757 102095320 102106147 102133372 102143125

我有两个专栏:

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使其自然化?

您当然不需要调用awk 3次来获得两个数字的平均值

awk '{printf("%d\n", ($1+$2)/2)}' input
使用
printf()
控制输出

100014056
10103075
101193245
101287428
101412704
101702452
101950148
101991590
102100733
102138248

您可以在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;
    }
}

当总和不均匀时,不确定您想要什么,但您可以一次性完成:

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

你要找的是printf

中间=中间,中间?中间值正好在这些数字之间。“这些数字”意味着什么?左边列表中的第一个数字和右边的第一个数字?我看了一下数字
100018608
(底部列表中的第一个数字),不知道你想做什么。对不起,John,我编辑了我得到的输出。我想得到列中央的数字(那些数字)。
gawk '{printf "%i\n", ($1 + $2) / 2}' input