生信基础操作01--awk

44 阅读1分钟

Linux常用操作手册

特殊符号作用

2 >&1 表示把标准错误重定向到标准输出。Linux终端用2表示标准错误,1表示标准输出。

文本内容操作

sort -u : 去除重复行

awk

其处理为按行处理,每读一行操作一行

  • OFS: 输出字段分隔符 (output field separtor)
  • FS: 输入字段分隔符 (field separtor)
  • BEGIN: 设置初始参数,初始化变量;BEGIN 块在程序开始时运行一次
  • END: 读完文件后做最终的处理
  • 其它{}:循环读取文件的每一行
  • $0表示一行内容;$1, $2, … $NF表示第一列,第二列到最后一列。
  • NF (number of fields)文件多少列;NR (number of rows) 文件读了多少行: FNR 当前文件读了多少行,常用于多文件操作时。
  • a[$1]=1: 索引操作,类似于python中的字典,在ID map统计中有很多应用。

实例1:

# 计算第二列内容出现的次数

>>> tst.txt
ID	Type
Pou5f1	aaa
Nanog	aaa
Sox2	b
Tet1	c
Tet3	d
Myc	b

awk 'BEGIN {OFS=FS="\t"} {if(FNR>1) a[$2]+=1;} END\
{print "Type\tCount"; for(i in a) print i, a[i];}' tst.txt

>>>OUT:
Type    Count
aaa     2
b       2
c       1
d       1

实例2:

# 判断FASTQ文件中,输出质量值的长度是与序列长度不一致的序列ID
>>> tst_fasta.fasta

>aq1
ACGTCGACGACGAGAGGAGAGGAGCCCTCTCGCCCGCCCTACTACCACCCACACACAACACAAGTGT
+
FFFFFFA$A#$$AFEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
>aq2
ACGTCGACGACGAGAGGAGAGGAGCCCTCTCGCCCGCCCTACTACCACCCACACACAACACAAGTGT
+
FFFFFF$A#$$AFEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

cat tst_fasta.fasta |\
awk '{if(FNR%4==1) ID=$0; else if(FNR%4==2) seq_len=length($0); \
		else if(FNR%4==0) {quality_len=length($0); if(seq_len!=quality_len) print ID; }}'

>>>OUT:
aq2

实例3:

# RNAseq中筛选差异基因

deseq_gene.txt
>>>

ID	log2fc	padj
A	1	0.001
B	-1	0.001
C	1	0.001
D	2	0.0001
E	-0.51	0.051
F	0.1	0.1
G	1	0.1

awk '$3<0.05 || NR==1' deseq_gene.txt
>>>OUT:
ID      log2fc  padj
A       1       0.001
B       -1      0.001
C       1       0.001
D       2       0.0001


# 这里用pandas再写一遍
# 注意下面的代码并没有跳过第一行的显示操作,pandas特性

import pandas as pd

data = pd.read_csv('deseq_gene.txt', delimiter='\t')
filtered_data = data[data['padj'] < 0.05]

filtered_data.to_csv('filtered_deseq_gene.txt', index=False, sep='\t')