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