![如何将表中的值转换为最接近的整数值并删除小数点?](https://linux22.com/image/1177287/%E5%A6%82%E4%BD%95%E5%B0%86%E8%A1%A8%E4%B8%AD%E7%9A%84%E5%80%BC%E8%BD%AC%E6%8D%A2%E4%B8%BA%E6%9C%80%E6%8E%A5%E8%BF%91%E7%9A%84%E6%95%B4%E6%95%B0%E5%80%BC%E5%B9%B6%E5%88%A0%E9%99%A4%E5%B0%8F%E6%95%B0%E7%82%B9%EF%BC%9F.png)
我有一个文件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
您可以尝试numfmt
GNU 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