为每个列 bash 创建带有百分比的 tsv



我正在尝试从 tsv 创建一个新的 tsv。在第一个中,我有一列包含示例名称,还有几列包含数字。在第二个中,我希望每列的百分比除以所有列的总和。

我已经这样做了,哪种工作,但随后它没有被制表符分隔。cat multiqc_data/mqc_featurecounts_biotype_plot_1.txt | awk -v OFS='t' -F't' 'NR>1{sum=0; for(i=1; i<=NF; i++) sum += $i; NF++; $NF=sum } 1' | tail -n +2 | awk '{for(i=2;i<=NF;i++)$i/=$42}1' | rev | cut -d" " -f2- | rev

然后,之后,我尝试使用column -t -s " "将其转换为tsv,但是没有用,我不知道为什么。

你能帮我这个吗?如果有其他代码有效,我将很乐意尝试。谢谢!

我正在尝试从 tsv 创建一个新的 tsv。在第一个中,我有一个 列包含示例名称和几列带有数字。在 第二个我想让列带有每个百分比的列 列除以所有列的总和。

我会做一个GNUAWK调用如下,让file.tsv内容

A   10  10  10
B   10
C   10  20  30  40  50

然后

awk 'BEGIN{FS=OFS="t"}{t=0;for(i=2;i<=NF;i+=1){t+=$i};for(i=2;i<=NF;i+=1){$i/=t};print}' file.tsv

给出输出

A   0.333333    0.333333    0.333333
B   1
C   0.0666667   0.133333    0.2 0.266667    0.333333

说明:我通知 GNUAWK制表符既是字段分隔符 (FS) 和输出字段分隔符 (OFS)。对于每一行,我确实将t的值设置为零,然后对从第 2 个开始的列求和,然后将从第 2 个开始的每列除以总和,print所有列。请注意,GNUAWK不限于标准输入,可以在不需要cat的情况下使用文件。

(在Gawk 4.2.1中测试)

最新更新