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')