我正在尝试从 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中测试)