例子文件

colname.txt

enzyme    sample1    sample2    sample3    sample4    sample5
1    2    2    3    4    5
2    2    4    6    8    8
3    4    7    8    9    10
4    5    2    5    9    0

只想要提取sample1和sample5还有enzyme的数据

从网上搜到的方法, 首先建立一个awk的脚本 叫select.awk 内容如下:

这里的cols是提取的列名字, 这里的input是输入的文件

BEGIN {split(cols,array,",") # 分割cols这个变量 到out这个array里
}
NR==1 {for (i=1; i<=NF; i++) # 读取第一行,i是从1开始一直到input文件的最后一列ix[$i] = i # ix[$1]=1 也就是说 ix[enzyme]= 1 这样就有对应的列名 所对应的列是第几列.
}
NR>=1 {for(i=1; i <= length(array); i++) # 遍历col给提供的参数# print the OFS as a characterprintf "%s%s", $ix[array[i]], OFS #$ix[array[1]] -> $ix[enzyme]-> $1 得到所对应的数值print ""
}

输出文件

enzyme sample1 sample5
1 2 5
2 2 8
3 4 10
4 5 0

这样就可以提取指定列了.

补充几个小科普

1. awk 里面的 NR==1 , 是指的第一行

echo -e "test test\ntest1 test1"|awk 'NR==1 {print $1}'

输出: test (这个指令是说输出第一行的第一列)

2. awk split 分割字符串

echo "test1|test2|test3" | awk '{split($0,a,"|"); print a[3],a[2],a[1]}'

zhidignliele输出

test3 test2 test1

3. awk -f

-f 指的是--file progfile

4. printf 输出

s 表示输出一个字符串

5. BEGIN/END简单用法,就是在执行具体操作之前,执行的操作,简单来说语句是下面的格式

awk 'BEGIN { actions } /pattern/ { actions }/pattern/ { actions }……….END { actions }
' filenames 

example

下面是testfile.com这个文件

cat testfile.com
www.apple.com
www.banana.com
www.orange.com
www.watermelon.com
www.kiwi.com
www.grape.com
www.avocado.com
www.cantaloupe.com

我想要在输出这个文件之前打印这些都是水果, 命令行如下

awk 'BEGIN {print "those are all fruits:"} {print $0} ' testfile.com 

输出结果:

those are all fruits:
www.apple.com
www.banana.com
www.orange.com
www.watermelon.com
www.kiwi.com
www.grape.com
www.avocado.com
www.cantaloupe.com

如果加patter,只输出以包括a字母的水果, 这里的/a/ 就是上文所对应的pattern

awk 'BEGIN {print "those are all fruits:"} /a/ {print $0} ' testfile.com
those are all fruits:
www.apple.com
www.banana.com
www.orange.com
www.watermelon.com
www.grape.com
www.avocado.com
www.cantaloupe.com

如果是想在结尾再加上 this is the end 语句,则 见下面例子

awk 'BEGIN {print "those are all fruits:"; } /a/ {print $0; } END {print "this is the end";}' testfile.com
those are all fruits:
www.apple.com
www.banana.com
www.orange.com
www.watermelon.com
www.grape.com
www.avocado.com
www.cantaloupe.com
this is the end

参考ref

https://www.tecmint.com/learn-use-awk-special-patterns-begin-and-end/

https://stackoverflow.com/questions/8009664/how-to-split-a-delimited-string-into-an-array-in-awk

根据列名提取指定列 shell awk相关推荐

  1. python csv文件和xlsx文件混杂时,提取指定列数据并合并

    这篇文章是R语言 如何合并csv文件(批量读取csv文件)的姊妹篇.提供更为强大的功能. 解决的问题是提取csv文件和xlsx文件混杂时,文件合并问题.具体来说,下面的代码是提取指定列文本,简单清洗后 ...

  2. orm提取指定列_使用ORM提取数据很容易! 是吗?

    orm提取指定列 介绍 几乎所有系统都以某种方式与外部数据存储一起运行. 在大多数情况下,它是一个关系数据库,并且通常将数据获取委托给某些ORM实现. ORM涵盖了很多例程,并且带来了一些新的抽象作为 ...

  3. R语言|根据列名提取/筛选列的两种方法

    R根据列名提取/筛选列 A little thought 刚入行的生信小白,还有很多R语使用不熟练.打算把常用的有用的记录在blog,以后就不用再重新百度谷歌了.也希望可以帮助到正在寻找答案的uu们 ...

  4. Linux 命令行操作 while read ; cut 提取指定列; uniq命令并计数;sort 命令倒序查找

    while read 命令 ls *txt* | while read line; do other-operate-command; done cut -f 命令 提取文件中第17 20列 zcat ...

  5. linux中修改某行某列字符串,Linux替换指定列的字符串(awk 命令)

    假设有文件test.txt,想把test.txt文件第三列含有的good替换为bye,并把替换后的文件保存为test_bye.txt,只需要如下命令. test.txt go go good go m ...

  6. 30_Pandas.DataFrame提取(选择)指定行名和列名的行和列

    30_Pandas.DataFrame提取(选择)指定行名和列名的行和列 从pandas.DataFrame中提取(选择)行名称(索引名称)和列名称(列名称)满足特定条件的行或列. 了解如何提取元素包 ...

  7. Linux在文件第一行添加字符,使用shell命令给文件中每一行的前面、后面、指定列添加字符...

    shell给一个文件中的每一行开头插入字符的方法:awk '{print "X"$0}' fileName shell给一个文件中的每一行结尾插入字符的方法:awk '{print ...

  8. linux提取第一列且删除第一行(awk函数)

    如下文件所示,只想提取红框中的内容,即进行提取第一列,且去除第一行的操作 则用到下列命令行: awk 'NR == 1 {next} {print $1}' file.txt > file_co ...

  9. android:查询数据库 指定列 指定列名 并输出查询结果(如查询电话本,SMS的ContentResolver提供的)

    如查询电话本,SMS的ContentResolver提供的cursor = getContentResolver().query(Uri.parse("content://sms/inbox ...

最新文章

  1. 触发器与存储过程笔记
  2. linux 设置 ls -l 快捷键为 ll 别名
  3. java8 内存模型_java8内存模型
  4. boost::multiprecision模块将使用 fixed_int 的算术结果与 GMP 结果进行比较相关的测试程序
  5. scrapy常用工具备忘
  6. 农用地包括哪些地类_土地地类一览表
  7. Golang基础知识入门详解
  8. LIO-SAM探秘第二章之安装编译与参数配置
  9. MAML小样本学习算法解读及基于飞桨的代码实现
  10. 二元函数偏导数公式_偏导数计算公式大全
  11. 厦门大学计算机科学夏令营过程,厦门大学信息学院计算机系夏令营学生见面会如期召开-厦门大学计算机科学系...
  12. 窗口函数 (转) rows between unbounded preceding and current row
  13. DxmCms自动过滤内容中的广告法违禁词功能
  14. 我用“电驴”抓肉鸡(转)
  15. python画小狗代码_用Python画一只有点方的小狗狗——turtle库circle()函数实践
  16. 高压放大器在工作中的应用实例有哪些
  17. unity中RectTransform的各个值得获取
  18. ThinkSystem SR650 BMC管理口配置
  19. 何文龙总经理赴京参加中搜峰会
  20. 使用scrapy爬取前程无忧所有大数据岗位并做出数据可视化

热门文章

  1. 通过ContentProvider实现获取手机联系人
  2. 从零开始的安卓开发环境搭建与入门
  3. 淘宝开放平台的认证授权机制
  4. 您的计算机运行的可能是盗版,为何我的电脑总跳出来:您的电脑可能是WINDOW盗版的受害者...
  5. 学习笔记 偶数的个数
  6. 软件测试行业一定要懂代码么?想学软测的先看了这篇文章再考虑吧
  7. 妙招-好用的优盘数据恢复软件
  8. 计算机经典书籍(转载,难以找到出处)
  9. 区块链学习三——比特币的数据结构
  10. 记录一次FTP登录500 OOPS:cannot change directory解决方案