awk 按照列名和顺序提取指定列数据

最新方法请看://www.greatytc.com/p/cc31cb7c614d

此方法能达到目的但不是最优方法

说明

需要两个文件,f1为需要提取的列名,自上而下为提取顺序;f2为待提取的矩阵,第一列默认输出。

f1示例

image.png

f2示例

image.png

脚本

awk 'BEGIN{FS=OFS="\t"}NR==FNR{a[NR]=$1}NR>FNR&&FNR==1{for(i=1;i<length(a)+1;i++){for(j=1;j<NF+1;j++){if(a[i]==$j){b[j]=$j}}}}NR>FNR{printf $1;for(i=1;i<length(a)+1;i++){for(j=1;j<NF+1;j++){if(a[i]==b[j]){printf "\t"$j}}}print ""}'  pheno.file  matrix.02

awk '
BEGIN{
  FS=OFS="\t"
}NR==FNR{
  a[NR]=$1
}NR>FNR&&FNR==1{
  for(i=1;i<length(a)+1;i++){
    for(j=1;j<NF+1;j++){
      if(a[i]==$j){
        b[j]=$j
       }
    }
  }
}NR>FNR{
  printf $1
  for(i=1;i<length(a)+1;i++){
    for(j=1;j<NF+1;j++){
      if(a[i]==b[j]){
        printf "\t"$j
      }
    }
  }
  print ""
}' pheno.file  matrix.02

结果

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容