如何将值限制为小数点后三位,同时保持表格中标题完整?

问题描述 投票:0回答:1

我有一个包含多列的制表符分隔文件,前三列是

chr
start
end
。其他列包含具有特定分数的不同样本。我的主要目标是将所有样本的值限制为小数点后三位。

grep -v 'NA' TestAllScore.tsv | head -n 10
chr start   end EE85756 EE85757 EE85770 EE85775
chr1    9900    10000   0.370534858784818   0.506262316364967   0.249866030926826   0.663009952219704
chr1    10000   10100   214.786706475599    313.545127935369    250.865495050533    335.980293287335
chr1    10100   10200   511.214593503454    684.63540583089 540.710090925652    713.895966052567
chr1    10200   10300   516.525593146036    630.296583874384    465.875214663067    545.822943164872
chr1    10300   10400   297.539491604209    396.572147819224    346.689117910971    339.295343048434
chr1    10400   10500   142.161874153775    272.537880309807    238.372193504192    255.093079116531
chr1    10500   10600   191.072475513371    295.150930440776    246.118040462924    277.635417492001
chr1    10600   10700   237.142309622283    345.102145655452    308.459615179167    306.310597925503
chr1    10700   10800   239.859565253372    270.512831044347    294.342184431801    272.497090362299

我使用下面的脚本来完成此操作,但输出看起来缺少标题。

awk '{ for (i=4; i<=NF; ++i) $i=sprintf("%.3f", $i); print }' TestAllScore.tsv | sed 's/ /\t/g' > TestAllScore2.tsv

grep -v '0.00' 11jHL.win.nucocc6.txt | head -n 10
chr1    11000   11100   177.486 211.955 240.996 249.955
chr1    11100   11200   136.480 218.874 242.620 236.529
chr1    11200   11300   106.714 251.444 252.240 225.921
chr1    11300   11400   172.422 274.900 305.336 211.997
chr1    11400   11500   178.104 301.732 303.087 196.085
chr1    11500   11600   192.431 272.875 252.864 219.954
chr1    11600   11700   256.287 271.863 219.507 267.690
chr1    11700   11800   190.084 231.024 198.144 229.733
chr1    11800   11900   162.047 218.705 221.881 183.156
chr1    11900   12000   180.203 228.156 241.745 147.520

我想知道如何将值限制为小数点后三位,同时保持标题完整。

bash awk
1个回答
0
投票

尝试使用

%.3f
格式打印非数字会打印
0.000
awk
脚本应通过测试
NR

保留第一行

无需通过管道连接到

sed
将空格转换为制表符,只需设置
awk
变量
OFS

awk -v OFS='\t' 'NR == 1 {print; next} 
                 { for (i=4; i<=NF; ++i) $i=sprintf("%.3f", $i); print }' TestAllScore.tsv > TestAllScore2.tsv
© www.soinside.com 2019 - 2024. All rights reserved.