Linux - awk
2023-03-07 09:47:40 时间
生信技能树学习笔记
在读取一行文本时,会用预定的字段分隔符划分每个数据字段,并分配给一个变量
默认的字段分隔符是任意空白字符(如空格或制表符),也可以用 -F 参数自定义分隔符
- $0 代表整个文本行
- $1 代表文本行中的第1个数据字段 ......
- $NF 代表文本行中的最后一个数据字段
less -S Data/example.gtf | cut -f 9 | head
less -S Data/example.gtf | awk -F '\t' '{print $9}' | less -S ## 此时指定分隔符为制表符
如果不指定
cat Data/example.gtf | awk '{print $9,$10}' | head ## 中间用空格连接
cat Data/example.gtf | awk '{print $9$10}' | head ## 直接连接
cat Data/example.gtf | awk '{print $9"@"$10}' | head
cat Data/example.gtf | awk '{print $9"\t"$10}' | head
匹配模式
cat Data/example.gtf | awk '/UTR/{print $0}' | less -S
cat Data/example.gtf | awk '/UTR/{print $1,$3,$4,$5,$7}' | head ## 可以按照输入的顺序输出
扩展模式
less -S Data/example.gtf | awk 'BEGIN{print "find UTR feature"} /UTR/{print $0} EBD {print "end"}' | less -S
awk内置变量
- FS:定义输入字段分隔符,Field Separator,同 -F
- RS:定义输入记录分隔符,Record Separator
- OFS:定义输出字段分隔符,Field Separator
- ORS:定义输出记录分隔符,Record Separator
- NF:数据文件中的字段综述,可以简单理解为列数
- NR:已处理的输入记录数,可以简单理解为行数
# 设置OFS以定义输出字段分隔符
cat Data/example.gtf | awk ' BEGIN{OFS=":"}{print $3,$4,$5}' | head
## 使用NR来打印行号
cat Data/example.gtf | awk 'BEGIN{FS="\t"; OFS=":"} {print NR,$9}' | head -5
awk 条件和循环语句
##判断第三列是否是基因
cat Data/example.gtf | awk '{if($3=="gene") print $0}' | head -1
## 判断第三列是否是基因,如果不是输出is not gene
less -S Data/example.gtf | awk '{if($3=="gene"){print $0} else{print $3 "is not gene"}}' | head
## 输出每行的第1-3个
less -S Data/example.gtf | awk '{for(i=1;i<4;i++){print $i}}' | less -S
## 可以通过paste拼回去
less -S Data/example.gtf | awk '{for(i=1;i<4;i++){print $i}}' | less -S | paste - - -
可以进行运算
## 匹配外显子并计算长度
cat Data/example.gtf | awk '/exon/{print $5-$4+1}' | head
练习
head Data/example.gtf | less -NS | awk '/ENSEMBL/{print $0}' | less -NS
less -NS Data/example.gtf | awk '{print $10,$12,$14}' | head | sed 's/"//g'| tr -d ';'
相关文章
- 欢迎参与 2020 年 AWS 存储日
- 基于 ElasticSearch 服务对 Application Load Balancer 日志做可视化分析
- 三星公司利用 Fargate 与 ECR 构建高安全性开发者门户
- 使用自定义词汇表与 Amazon Augmented AI,提升 Amazon Transcribe 的语音到文本转录效能
- 在筹备中;位于印度海得拉巴的 AWS 区域
- 新增功能 – 使用 Amazon EventBridge 存档和重播事件
- Amazon MQ 更新 – 新的 RabbitMQ 消息代理服务
- 计划中 – 位于瑞士苏黎世的新 AWS 区域
- java Thread interrupt()
- 2020 年 Amazon Prime 会员日 – 由 AWS 提供支持
- Amazon SNS FIFO(先进先出)发布/订阅消息传递简介
- CloudWatch 警报和 OpsCenter 的全新集成
- 使用 SAML 和 Keycloak 建立 AWS SSO 登录 Console
- Amazon Personalize 现将快速变化的新产品与全新内容目录的个性化推荐效果提升达50%
- 自建 Kubernetes 集群提交和管理 Amazon SageMaker 训练任务(一)SageMaker Operator 安装及任务提交
- 公开预览 – AWS Distro for OpenTelemetry
- 基于 Chef InSpec 的基础设施测试
- 使用 AWS CDK 结合 OPA 实现“策略即代码”
- 利用 Slack 和 AWS AppStream2.0 集成进行 AppStream2.0 Fleet 队列管理
- 新增功能 — 使用 AWS PrivateLink 通过 AWS 专用网络访问 AWS Lambda