示例文件:
此文件sep= \t,其他分隔符需要自己更换;
awk第一种方法
命令如下:
awk 'BEGIN{FS=OFS="\t"}{for(i=1;i<NF+1;i++){a[NR,i]=$i}}END{for(i=1;i<NF+1;i++){for(j=1;j<NR;j++){printf a[j,i]"\t"}print a[j,i]}}' testfile2
转置结果:
这种需求还是需要一些小操作的
awk第二种方法
根据列数用awk输出每一列时格式输出转为一行并保存到以列数为名的数组中,最后再输出所有数组,减少了一个维度会简单一些,代码如下:
awk 'BEGIN{FS=OFS="\t"}NR==1{for(i=1;i<NF+1;i++){a[i]=$i}}NR>1{for(i=1;i<NF;i++){a[i]=a[i]"\t"$i}a[i]=a[i]"\t"$i}END{for(i=1;i<NF+1;i++){print a[i]}}' testfile2
使用R tx 函数
用时统计
结果是一样的,看一下用时(待转换的矩阵为55827行,13列的基因表达矩阵):
结果文件:
第一种:
第二种:
使用R tx函数用时:
能看出来第一种是最优的,第二种减少一个维度,增加了运行时间,R函数第二