美文网首页
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