有一个文件我只想要里面的部分样本数据,文件结构如下:
$head -1 genus.xlsOTU ID A1 A2 A3 M15B1 M15B2 M15B3 M15C1 M15C2 M15C3 M15D1 M15D2 M15D3 M15E1 M15E2 M15E3 M27B1 M27B2 M27B3 M27C1 M27C2 M27C3 M27D1 M27DM27D3 M27E1 M27E2 M27E3 R15b1 R15b2 R15b3 R15c1 R15c2 R15c3 R15d1 R15d2 R15d3 R15e1 R15e2 R15e3 R27b1 R27b2 R27b3 R27c1 R27c2 R27c3 R27d1 R27dR27d3 R27e1 R27e2 R27e30319-6G20_norank 17 22 21 44 24 24 6 15 34 17 18 7 55 29 32 46 78 61 13 2 27 37 61 72 55 146 196 26 24 19 17 16 4 77 45 27 58 47 36 48 37 141 13 28 10 38 87 61 62 83 119
要抓取的样本名:
$cat group.List M15B1M15B2M15B3M27B1M27B2M27B3 R15b1R15b2 R15b3R27b1 R27b2R27b3
AWK实现:
$awk -F "\t" ‘NR==FNR{a[]=1}NR>FNR{if(FNR==1){for(i=1;i<=NF;i++){if(a[$i]){num =num+1;b[num]=i;}}printf ;for(i=1;i<=length(b);i++){printf "\t"$b[i]}print""}else{printf ;for(i=1;i<=length(b);i++){printf "\t"$b[i]}print""}}‘ group.List genus.xls >select.txt
部分结果展示:
$head select.txtOTU ID M15B1 M15B2 M15B3 M27B1 M27B2 R15b1 R15b3 R27b2 R27b30319-6G20_norank 44 24 24 46 78 26 19 37 1410319-6M6_norank 1 0 0 0 0 1 0 0 01921-2_norank 0 0 1 0 0 1 0 1 01921-3_norank 2 4 1 0 2 1 1 0 21959-1_norank 16 13 27 19 11 16 24 17 19480-2_norank 57 41 84 52 51 40 45 39 52ABS-19_norank 2 1 1 0 1 0 1 2 1AKIW1012_norank 0 0 0 0 0 0 0 0 0AKYH478_norank 0 0 0 0 0 0 0 0 0
处理过程是 先根据要挑选的样本名索取在文件第一行对应样本名的下标 然后根据样本下标提取每行信息
AWK print 默认在字符后面加换行符 printf 可以去除这个效果参考路径:https://blog.csdn.net/xuejinliang/article/details/51441971AWK读取多行文件参考路径:https://www.cnblogs.com/Berryxiong/p/6209332.HTML总结
以上是内存溢出为你收集整理的awk 抓取文件子集全部内容,希望文章能够帮你解决awk 抓取文件子集所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)