生物信息之獨孤九劍專欄合集

-回復 -瀏覽
樓主 2019-07-02 04:56:08
舉報 只看此人 收藏本貼 樓主

編者按

前前后后耗時兩年,終于更新信了生物信息之獨孤九劍專欄。這些命令是我多年工作中經常用到的,包括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
生物學才是終極學科


點擊閱讀原文有驚喜!!!

我要推薦
轉發到
招财蟾蜍怎么玩