常用Linux命令

Posted 修罗神天道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常用Linux命令相关的知识,希望对你有一定的参考价值。

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格式的文件,拷贝至当前目录。 

以上是关于常用Linux命令的主要内容,如果未能解决你的问题,请参考以下文章

linux常用命令多少个

linux系统基础常用命令

Linux文本操作常用命令

Linux常用命令

Linux部署项目常用命令

Linux 常用命令(要求全而精)