linux中使用awk根据多个列名提取指定列数据

linux中使用awk根据多个列名提取指定列数据

首先需要准备一个只包含列名的文件name.list
和你要从中提取列的文件data.txt

name.list
a1
a2
a3
a4

data.txt
a0  a1  a2  a3  a4  a5  a6  b1  b2  b7  b8  b19
1   2   3   3   3   3   3   4   5   5   6   7  
1   2   3   1   3   3   3   2   5   1   6   7  
1   2   3   3   3   1   3   4   5   5   6   1  
1   2   3   3   8   3   4   3   5   5   1   7  
... 

提取的文件,第一行为列名,与name.list对应,默认输出第一列(a0列)

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)}'  name.list  data.txt

不输出第一列(a0列)

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)}'   name.list  data.txt
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值