生信技能树学习笔记
awk:也称 gawk,编程语言,可对文本和数据进行处理
常见参数:-F,fields,设置字段分隔符;
用法:awk [options] '{script}' file
基础结构: ' {script} '
匹配结构: ' /pattern/{script} '
扩展结构: 'BEGIN{script} {script} END{script}'
awk 在读取一行文本时,会用预定义的字段分隔符划分每个数据字段,并分配给一个变量。
➢ $0 代表整个文本行;
➢ $1 代表文本行中的第1个数据字段;
➢ ……
➢ $NF 代表文本行中的最后一个数据字段
awk 默认的字段分隔符是任意空白字符(如:空格 or 制表
符),也可以用 -F 参数自定义分隔符
示例
#先看我们文档中的第九列
#但由于awk 默认的字段分隔符是任意空白字符,所以在它取第九列时显示为:
补充:attributes 属性,必须要有以下两个值:
gene_id value: 表示坐标在基因组上的基因座的唯一的ID。
gene_id 与 value 值用空格分开,如果值为空,则表示没
有对应的基因。
transcript_id value: 预测的转录本的唯一ID。
transcript_id与value值用空格分开,空表示没有转录本
#这样也可以
#里面引号要用双引号,因为linux成对识别引号
#指定分隔符为tab键
#匹配模式
#可以自定义输出顺序
#BEGIN{主体操作前} 主题操作 END{主题操作后的操作}
awk 内置变量:
➢ FS :定义输入字段分隔符,Field Separator,同 –F
➢ RS :定义输入记录分隔符,Record Separator
➢ OFS :定义输出字段分隔符,Out Field Separator
➢ ORS :定义输出记录分隔符,Out Record Separator
➢ NF :数据文件中的字段总数,可以简单理解为列数
➢ NR :已处理的输入记录数,可以简单理解为行数
#设置OFS以定义输出字段分隔符:
cat Data/example.gtf | awk 'BEGIN{OFS=":" } {print
#使用NR来打印行号
cat Data/example.gtf | awk 'BEGIN{FS="\t"; OFS=":" } {print NR,$9}' | head -5
awk 条件和循环语句:
if:条件判断
awk ' { if (判断条件) {yes} else {no} } '
for:循环语句
awk ' { for (循环条件) {循环语句} } '
#当i=1,i<4,1+1=2,打印
awk 数学运算:
+ (加),- (减), * (乘),^ (幂)
/ (除),** (平方), % (取余)
int(x) x的整数部分,取靠近零一侧的值
log(x) x的自然对数
#awk计算外显子长度
#加一
#除法,取整数
#加0.5四舍五入
常见报错
• 找不到文件、文件不存在:No such file or directory
• 没有权限 :Permission denied
• 命令不存在 :command not found
• 搜索解决报错注意 :
• 如果答案提到用 root 用户(命令行提示符是 # ),或者提到
的解决方法用到了 apt/yum/sudo ,表明部分操作是管理员命令,
需要注意自己是否有管理员权限(大概率是没有的)
• 认清楚命令的结构:命令 + 参数 + 文件