如何将表中的值转换为最接近的整数值并删除小数点?

如何将表中的值转换为最接近的整数值并删除小数点?

我有一个文件file.tsv,它有几列,如下所示:

# Gene Family   xyz136  xyz140  xyz145  xyz147  xyz148
UNMAPPED    7650721.04472   4253028.928704  8415910.028496  7453466.3835    3282779.545448
UNGROUPED   4148127.07896   3999040.089552  4423800.370656  6066650.96145   4460845.331384
UNGROUPED|g__Absiella.s__Absiella_dolichum  0   0   8548.5181548    0   0
UNGROUPED|g__Acidaminococcus.s__Acidaminococcus_fermentans  0   0   0   0   0
UNGROUPED|g__Acidaminococcus.s__Acidaminococcus_intestini   0   0   0   0   0
UNGROUPED|g__Acidaminococcus.s__Acidaminococcus_intestini_CAG_325   0   0   0   0   0

如何通过删除小数点将此表中的所有数值转换为最接近的整数?

我希望它看起来像这张表:

# Gene Family   xyz136  xyz140  xyz145  xyz147  xyz148
UNMAPPED    7650721 4253029 8415910 7453466 3282780
UNGROUPED   4148127 3999040 4423800 6066651 4460845
UNGROUPED|g__Absiella.s__Absiella_dolichum  0   0   8549    0   0
UNGROUPED|g__Acidaminococcus.s__Acidaminococcus_fermentans  0   0   0   0   0
UNGROUPED|g__Acidaminococcus.s__Acidaminococcus_intestini   0   0   0   0   0
UNGROUPED|g__Acidaminococcus.s__Acidaminococcus_intestini_CAG_325   0   0   0   0   0

注意:虽然它是一个.tsv文件,但它看起来不像表格。我不知道应该使用哪种格式化工具。

谢谢,dc

答案1

您可以尝试numfmtGNU Coreutils 中的实用程序:

numfmt --delimiter=$'\t' --header --format='%.0f' --field=2- <file.tsv

或者,在 awk 中类似这样的操作:

awk -F'\t' 'BEGIN{OFS=FS} NR>1 {for(i=2;i<=NF;i++) $i=int($i+0.5)} 1' file.tsv

相关内容