查看原文
其他

生物信息之独孤九剑专栏合集

2018-03-28 王通 基因学苑

编者按

前前后后耗时两年,终于更新信了生物信息之独孤九剑专栏。这些命令是我多年工作中经常用到的,包括grep,sed,单行perl,sort,awk,vim,find,cut,xargs等9个命令。当然还有很多其他的Linxu命令。这些命令组合起来,可以完成非常多的功能。而且往往只需要一行命令就能解决问题。无需复杂的编程,非常的好用。


生物信息之独孤九剑——grep


案例一:统计fasta文件中序列的条数;

grep -c ">"  gene.ffn


案例二:输出满足条件的序列;

grep -A 2 "3 gi 29732 34486" lastz.axt

案例三:筛选出不满足条件的内容;

ps -fx | grep -v "S"

不输出进程状态为S的任务。


生物信息之独孤九剑——sed


案例一:输出固定的行

sed -n '1307p'  seq.fna   #输出文件第1307行;

sed -n '100,200' seq.fna  #输出文件第100到200行;


案例二:替换操作

sed -e 's/gi/GI/' seq.fna  #将文件中gi全部替换为大写GI;

sed -i 's/gi/GI/g' seq.fna   #在原文件上进行替换,并且进行全部替换;

sed -i.bak 's#GI#gi#' seq.fna  #在原文件上进行替换,并进行备份;

sed -e 's/gi/GI/2;s/ref/REF/2' seq.fna   #只将第二次出现的gi和ref进行替换;

sed -f sed.list cds.list    #根据文件中的模式进行替换,可同时进行多条件替换;

sed -n 's/gi/GI/p' seq.fna  #打印发生替换的行;


案例三:删除空白行;

sed -e '/^\s*$/d'  seq.fna  #删除文件中的空白行;


案例四:行寻址

sed -n '/ref/p' seq.fna   #输出文件中包含ref关键字的行;

sed  '100,2000s/GI/gi/g' seq.fa  #则只替换100行到2000行的内容;

sed  '100,2000!s/GI/gi/g' seq.fa  #加感叹号取反,在这个范围之外的执行操作;


案例五:删除操作

sed -e '/>/d' seq.fna #删除包含ref的行;

sed -e 's/:.*//g' seq.fna   #删除冒号之后的所有内容;


案例六:对应替换,类似于tr的功能

sed -e 'y/ATCG/atcg/' seq.fna  #修改大小写

sed -e '/>/!y/ATCG/atcg/' seq.fna  #DNA序列反向互补配对,并修改大小写


生物信息之独孤九剑——单行perl


案例一:命令行模式perl;

perl -e "print ”hello,world\n";


案例二:while循环;

-n是自动循环,相当于 while(<>) { 脚本; };

perl -ne '{chomp;print "$_\n";}' test.txt     #使用-ne来都读取这个文件,并将其一行行打印出来。这个相当于cat的功能了。


案例三:替换模式,相当于sed功能;

perl -p -e ‘s/scaffold_//'  test.txt   #将其中的ID行里面的scaffold下划线都替换掉;

perl -p -e  -i‘s/scaffold_//'  test.txt   #直接在源文件修改,相当于sed -i;

perl -pie ’s/\r\n/\n/g’ test.txt  #将换行符\r\n替换成\n,相当于dos2unix命令的功能。


案例四:打印文件的任意行或者任意范围的行,相当于awk功能;

perl -lane ‘print “@F[0..4] $F[6]“‘ file   #取出文件的一部分,显示字段0-4和字段6,字段的分隔符是空格;

perl -F: -lane ‘print “@F[0..4]\n”‘ /etc/passwd  #修改分隔符为冒号;


案例五:利用正则表达式,输出固定范围行;

perl -ne ‘print if /^START$/ .. /^END$/’ file   #打印START和END之间的部分;

perl -ne ‘print unless /^START$/ .. /^END$/’ file  #不打印START和END之间的部分;


案例六:显示开头50行,相当于head;

perl -pe ‘exit if $. > 50′ file   #输出文件前50行,相当于head的功能;

perl -ne ‘print if 15 .. 17′ file   #显示15行到17行,相当于head,管道与tail;

如果要丢弃模式内的,将if切换成unless即可。

案例七:提取固定字符;

perl -lne ‘print substr($_, 0, 80) = “”‘ file  #去除每行前80个字符;


案例八:搜索功能,相当于grep功能;

perl -ne ‘print if /comment/’ duptext  #查找固定模式的字符串:

perl -ne ‘print unless /comment/’ duptext   #查找不含comment字符串的行,相当于grep -v;


案例九:排序;

perl -e ‘print sort <>’ #file  #文件按行排序;

perl -00 -e ‘print sort <>’ #file  #文件按段落排序;

perl -0777 -e ‘print sort <>’ file1 file2  #多个文件按文件内容排序,并返回合并后的文件:


案例十:文件按行反转

perl -e ‘print reverse <>’ file1  #文件按行翻转;


生物信息之独孤九剑——sort


案例一:直接排序;

sort  


案例二:按相反顺序进行排序;

sort -r  


案例三:根据数字大小进行排序;

sort -n


案例四:排序去除重复;

sort -u


案例五:多条件排序;

sort -nrk3 -k2   #首先按照第三列进行排序,然后按照第2列进行排序;


案例六:统计blast比对上的序列数目;

awk '{print $1} ' blast.out  |  sort -n | uniq | wc


生物信息之独孤九剑——awk


案例1:输出一个列表任意行;

awk '{print $1}' blast_m8.out  #输出blast m8 格式结果的第一行;

awk -F ":" '{print $1,$NF}' passwd.list   #通过-F修改默认分隔符为冒号,输出第一行与最后一行;


案例2:格式转换

awk '{print"@" $1"\n"$10"\n""+\n"$11""}' all.sam  #将短序列比对上的reads输出出来,生成fastq文件;


案例3:过滤blast结果

awk ’{if ($3>=80 && $4>=100) print $0}'  blast_m8.out  #过滤blast比对结果,将identity 大于80,并且比对长度大于100bp的结果输出;


案例4:比较

awk '$8>$10' input.txt #输出第8列大于第10列的行。


案例5:匹配输出

awk '$0~ /wang/{print $0}' passwd.list   #利用正则表达式,将秘密表中姓wang的账户都输出出来;


案例6:格式化输出

awk 'BEGIN{print "The Program Begin\n"}{if ($3>=80 && $4>=100) print $0}END{print " The Program End\n"}' input.txt  #利用BEGIN和END关键字生成报告;


案例7:修改字段和记录分隔符

awk 'BEGIN{OFS="\t"}{print $2,$4,$5}' input.txt   #在BEGIN中设定字段分隔符和记录分隔符;


案例8:awk编程计算

awk '{x+=$3}END{print x/NR}' input.txt   #计算第三列的平均值,最后在END将其输出出来。


案例9:awk编程比较大小

awk   'BEGIN { max=100 ;print "max=" max} {max=($1 >max ?$1:max); print $1,"Now max is "max}' input.txt  #取得文件最后一个域的最大值。 


案例10:awk编程求和

awk '{print $0,$3+$4}' input.txt  #计算第3列和第4列的和。


案例11:输出固定行内容

awk 'NR>=20&&NR<=80' input.txt  #输出第20到第80行内容。


案例12:合并文件

awk 'BEGIN{while((getline<"file1")>0)l[$1]=$0}$1 in l{print $0"\t"l[$1]}' file2  #将两个文件按列合并起来,类似jion命令的功能。


案例13:去重复

awk '!($0 in a) {a[$0];print}' input.txt  # 打印不重复的行,类似uniq的功能;

awk '!($2 in l){print;l[$2]=1}' input.txt #计算第二列内容非冗余的次数,类似于uniq的功能;


案例14:统计字符

awk '{for(i=1;i!=NF;++i)c[$i]++}END{for (x in c) print x,c[x]}' input.txt 计算每个字符出现的次数,类似wc的功能。


案例15:替换

awk '{sub(/test/, "no", $0);print}' input.txt 进行替换,类似sed的功能,


案例16:fastq转换为fasta

awk '{getline seq;getline plus;getline qual;sub("@",">",$0);print $0 "\n"seq}'  test.fastq


生物信息之独孤九剑——vim

filetype on #识别文件扩展名

syntax on #表示语法高亮

set nu  #在每一行前面显示行号,

set encoding=utf-8   #让vim支持中文显示,

set ruler  #打开光标的行列位置显示功能 ,

set nobackup   #不设置备份,

set tabstop=4   #一个tab是4个字符


生物信息之独孤九剑——find


案例一:搜索Data目录下以点fna结尾的文件;

find  ../Data -name *.fna


案例二:搜索系统中最近5分钟内编辑过的文件;

find / -amin 5

注意:当在根目录下搜索的时候,需要小心,由于文件较多,往往速度比较慢,并且系统中有很多实时更新的文件,所以,一般情况下尽量不要在根目录下搜索。


案例三:查找大于100M的文件;

find ./-size 100M


案例四:按照文件类型搜索;

find  ./ -type 文件类型

c 的档案

d: 目录 

b: 区块装置档案 ,

p: 具名贮列

f: 一般档案

l: 符号连结

s: socket


案例五:搜索文件,直接处理;

find ./temp/ -name *.fna -exec rm '{}' \;

-exec ,也就是execise,执行。相应命令的形式为'command' { } \;筛选以点fna结尾文件,直接将查找出来的文件删除掉。



生物信息之独孤九剑——cut


案例一:通过字节进行分割;

cut -b 1 blastm8.list

将文件中每一行第一个字符输出出来。输出结果就是一堆字符gggggg。


案例二:一次取出多个字节;

cut -b 1-28 blastm8.list

cut支持多个字符,比如1-28,则将第一列提取出来了。


案例三:自定义字符进行分割;

cut -d "|" -f 4,8  blast_m8.list

cut -d 竖线来分隔域,分隔之后,这部分是第四个域和第八个域的内容,我们设置-f即可。


生物信息之独孤九剑——xargs

案例一:

find ./ -name *.fna | xargs rm

搜索当前目录下所有一点fna结尾的文件,然后删除掉。


案例二:

echo --help  |  xargs cat

将--help参数传递给cat命令


案例三:

find ./ -name "*.fna" | xargs tar -zcf genome.tar.gz

搜索当前目录下所有一点fna结尾的文件,然后打包压缩。


案例四:

cat passwd.txt |xargs -d: -n 2

使用-d来修改分隔符,配合-n,让每行输出固定的内容。


案例五:

find  ../../ -name  "*.fq.gz  | xargs -I {}  cp {} .

将某个目录下fq.gz格式的文件,拷贝至当前目录。



---------- END ----------

(更多精彩内容,欢迎关注微信公众号)



您可能还会感兴趣的

手把手教你生信分析平台搭建专栏合集
生物信息重要资源站点合集
Perl还是Python或者R
绘制manhanttan图
利用R绘制GO条目图
如何在Linux下优雅的装X
利用R实现vlookup
生物学才是终极学科


点击阅读原文有惊喜!!!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存