美文网首页
awk 按照列名和顺序提取指定列数据最快方法

awk 按照列名和顺序提取指定列数据最快方法

作者: 吃吃吃_就知道吃 | 来源:发表于2022-09-17 10:35 被阅读0次

    需要f1:


    image.png

    第一列为要提取的列名,其他列没有要求,tab分割

    f2:


    image.png

    需要提取的文件,第一行为列名,与f1对应,第一列默认输出;使用脚本:

    awk 'BEGIN{FS=OFS="\t"}NR==FNR{a[NR]=$1}NR>FNR&&FNR==1{tar="$1";for(i=1;i<length(a)+1;i++){for(j=1;j<NF+1;j++){if(a[i]==$j){tar=tar",$"j}}}cmd="awk '\''BEGIN{FS=OFS=\"\\t\"}{print "tar"}'\'' " ARGV[2];system(cmd)}'  list1  data
    

    下面的脚本默认不输出第一列

    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){if(tar == ""){tar="$"j}else{tar=tar",$"j}}}}cmd="awk '\''BEGIN{FS=OFS=\"\\t\"}{print "tar"}'\'' " ARGV[2];system(cmd)}'    list1  data
    

    输出结果:


    image.png

    此方法是根据列名顺序在读f2第一行时生成新的awk脚本,之后使用system调用,是最快的方法;输出命令瞅一眼


    image.png

    之前的文章:https://www.jianshu.com/p/dafeb8b054c2
    是在读f2每一行时都进行循环输出,是非常耗时的方法

    相关文章

      网友评论

          本文标题:awk 按照列名和顺序提取指定列数据最快方法

          本文链接:https://www.haomeiwen.com/subject/tznsortx.html