0

我想计算每行第 2 列和第 3 列的平均值,将此值加 1 并打印整行。一些平均值将是浮点数。

输入文件如下所示:

chr20 2330559 2330737
chr20 2332853 2333041
chr20 2537555 2537711

输出文件:

chr20 2330648 2330649
chr20 2332947 2332948
chr20 2537633 2537634

我尝试了各种 awk 组合但没有成功。任何建议都会很棒!谢谢哈丽特

4

3 回答 3

3

为此使用 awk:

awk '{$2=($2+$3)/2; $3=$2+1}1' file

您还可以使用该int()函数来确保结果是整数:

awk '{$2=int(($2+$3)/2); $3=$2+1}1' file
于 2013-08-29T15:36:51.520 回答
2

试试这个单行:

awk '{a=($2+$3)/2;$2=a;$3=a+1}7' file

它给

chr20 2330648 2330649
chr20 2332947 2332948
chr20 2537633 2537634
于 2013-08-29T15:37:31.133 回答
2

就像是:

awk '{ printf("%s %d %d", $1, ($2 + $3) / 2, ($2 + $3) / 2 + 1) }'

当平均值不是整数时,您没有给出任何指示应该发生什么。

于 2013-08-29T15:40:49.487 回答