根据列名提取指定列 shell awk
例子文件
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相关推荐
- python csv文件和xlsx文件混杂时,提取指定列数据并合并
这篇文章是R语言 如何合并csv文件(批量读取csv文件)的姊妹篇.提供更为强大的功能. 解决的问题是提取csv文件和xlsx文件混杂时,文件合并问题.具体来说,下面的代码是提取指定列文本,简单清洗后 ...
- orm提取指定列_使用ORM提取数据很容易! 是吗?
orm提取指定列 介绍 几乎所有系统都以某种方式与外部数据存储一起运行. 在大多数情况下,它是一个关系数据库,并且通常将数据获取委托给某些ORM实现. ORM涵盖了很多例程,并且带来了一些新的抽象作为 ...
- R语言|根据列名提取/筛选列的两种方法
R根据列名提取/筛选列 A little thought 刚入行的生信小白,还有很多R语使用不熟练.打算把常用的有用的记录在blog,以后就不用再重新百度谷歌了.也希望可以帮助到正在寻找答案的uu们 ...
- Linux 命令行操作 while read ; cut 提取指定列; uniq命令并计数;sort 命令倒序查找
while read 命令 ls *txt* | while read line; do other-operate-command; done cut -f 命令 提取文件中第17 20列 zcat ...
- linux中修改某行某列字符串,Linux替换指定列的字符串(awk 命令)
假设有文件test.txt,想把test.txt文件第三列含有的good替换为bye,并把替换后的文件保存为test_bye.txt,只需要如下命令. test.txt go go good go m ...
- 30_Pandas.DataFrame提取(选择)指定行名和列名的行和列
30_Pandas.DataFrame提取(选择)指定行名和列名的行和列 从pandas.DataFrame中提取(选择)行名称(索引名称)和列名称(列名称)满足特定条件的行或列. 了解如何提取元素包 ...
- Linux在文件第一行添加字符,使用shell命令给文件中每一行的前面、后面、指定列添加字符...
shell给一个文件中的每一行开头插入字符的方法:awk '{print "X"$0}' fileName shell给一个文件中的每一行结尾插入字符的方法:awk '{print ...
- linux提取第一列且删除第一行(awk函数)
如下文件所示,只想提取红框中的内容,即进行提取第一列,且去除第一行的操作 则用到下列命令行: awk 'NR == 1 {next} {print $1}' file.txt > file_co ...
- android:查询数据库 指定列 指定列名 并输出查询结果(如查询电话本,SMS的ContentResolver提供的)
如查询电话本,SMS的ContentResolver提供的cursor = getContentResolver().query(Uri.parse("content://sms/inbox ...
最新文章
- 触发器与存储过程笔记
- linux 设置 ls -l 快捷键为 ll 别名
- java8 内存模型_java8内存模型
- boost::multiprecision模块将使用 fixed_int 的算术结果与 GMP 结果进行比较相关的测试程序
- scrapy常用工具备忘
- 农用地包括哪些地类_土地地类一览表
- Golang基础知识入门详解
- LIO-SAM探秘第二章之安装编译与参数配置
- MAML小样本学习算法解读及基于飞桨的代码实现
- 二元函数偏导数公式_偏导数计算公式大全
- 厦门大学计算机科学夏令营过程,厦门大学信息学院计算机系夏令营学生见面会如期召开-厦门大学计算机科学系...
- 窗口函数 (转) rows between unbounded preceding and current row
- DxmCms自动过滤内容中的广告法违禁词功能
- 我用“电驴”抓肉鸡(转)
- python画小狗代码_用Python画一只有点方的小狗狗——turtle库circle()函数实践
- 高压放大器在工作中的应用实例有哪些
- unity中RectTransform的各个值得获取
- ThinkSystem SR650 BMC管理口配置
- 何文龙总经理赴京参加中搜峰会
- 使用scrapy爬取前程无忧所有大数据岗位并做出数据可视化