生信實戰(zhàn)分析中常用的Linux命令(二)

前面已經(jīng)介紹了比較基礎(chǔ)Linux命令,在這一部分我將介紹適合多樣本數(shù)據(jù)分析的一些常用的復(fù)雜命令。

以bulk轉(zhuǎn)錄組為例

接前面,我們使用mamba已經(jīng)成功安裝分析所需的各種包椿胯,現(xiàn)在需要使用它們一步步進行分析。一般我們測序的樣本至少包括六個(control組三次重復(fù)剃根,實驗組三次重復(fù)哩盲,還可能包括不同時間,處理方式等等)狈醉。每一個樣本生成的測序數(shù)據(jù)都需要運行轉(zhuǎn)錄組數(shù)據(jù)分析流程(包括質(zhì)控廉油,比對,定量等)苗傅。而顯然一個個樣本運行并不是明智的選擇抒线,效率低且容易出錯。這就需要學習編寫shell腳本渣慕、使用循環(huán)語句十兢、條件語句等

首先介紹shell及shell腳本。Shell是計算機操作系統(tǒng)中的命令行解釋器摇庙,用于解釋和執(zhí)行用戶輸入的命令旱物。它是用戶與操作系統(tǒng)內(nèi)核之間的接口,允許用戶通過命令行界面與操作系統(tǒng)進行交互卫袒。Bash是最常用的Shell宵呛,幾乎所有的Linux發(fā)行版都默認使用它。shell腳本就是由一系列命令組成的執(zhí)行文件夕凝,將一些命令整合到一個文件中宝穗,并以文本文件的形式保存,以便在Shell中執(zhí)行码秉。Shell腳本通常用于自動化重復(fù)性任務(wù)逮矛、批處理作業(yè)和系統(tǒng)管理。

腳本文件的命名:Shell腳本文件通常以.sh為擴展名转砖,例如RNA-seq.sh
指定解釋器:腳本文件的第一行通常是指定要使用的Shell解釋器须鼎,如#!/bin/bash
使用#符號添加注釋鲸伴,這些注釋將被解釋器忽略。注釋對于解釋腳本中的操作和目的非常有幫助晋控。下面是shell腳本的簡單編寫和運行

#編寫shell腳本汞窗,打開一個文本編輯器
vi RNA-seq.sh
#!/bin/bash
#This is a RNA-seq script
#Shell腳本支持設(shè)置變量,使用=符號賦值
name="john"
#echo命令將文本輸出到終端
echo "what is your name"
#使用變量赡译,用$引用變量仲吏,下面兩種都可以
echo $name
echo ${name}
#在${}中使用“#”獲取長度,返回4
echo ${#name}
#提取子字符串蝌焚,從第二個字符到第四個字符裹唆,以及從第一個字符到第四個字符輸出john
echo ${name:1:3}
echo ${name::3}
#運行.sh腳本
bash RNA-seq.sh

接下來在多個樣本處理過程中,需要重復(fù)運行各個命令只洒,這就用到了循環(huán)語句许帐。
我一般常用的就是for循環(huán)。for語句結(jié)構(gòu)是讀取不同的變量值红碑,用來逐個執(zhí)行同一組命令
for 變量名 in 取值列表
do
命令
done

#將路徑設(shè)置為變量舞吭,以后再分析相似類型的數(shù)據(jù)泡垃,腳本就不用每一步都修改路徑了析珊,只需要將path變量修改成適合的路徑即可
path=/home/RNA-seq
cd $path/fastq
for i in $path/fastq
do
  echo $i
done

需要注意的是一般測序數(shù)據(jù)都是雙端測序數(shù)據(jù),即一個樣本有R1.fq.gz和R2.fq.gz兩個測序文件蔑穴,所以每個樣本在執(zhí)行命令時需要同時輸入兩個文件忠寻,而for循環(huán)每次只能讀取一個變量值。所以我們首先需要解決這個問題

#首先制作一個腳本
vi fastq.sh
#!/bin/bash
#列出所有(_R1.fq.gz)的路徑存和,并將這些路徑保存到文件1中奕剃。>符號被用作輸出重定向操作符,作用是將命令的輸出結(jié)果寫入到指定的文件中捐腿。
ls /home/RNA-seq/fastq/*_R1.fq.gz > 1 
ls /home/RNA-seq/fastq/*_R2.fq.gz > 2
#使用cut命令根據(jù)/分隔符提取第5個字段(第一個字段為空纵朋,完整文件路徑在第5個位置),再次使用cut根據(jù)_分隔符提取第1個字段(樣本名)茄袖,并將結(jié)果保存到文件0中操软。
ls /home/RNA-seq/fastq/*_R2.fq.gz |cut -d"/" -f 5|cut -d"_" -f 1  > 0
#paste命令合并文件0、1和2的內(nèi)容(分別是樣本名宪祥、_R1.fq.gz和_R2.fq.gz的路徑)聂薪,生成文件config
paste 0 1 2  > config
#類似于sample1 /home/RNA-seq/fastq/sample1_R1.fq.gz /home/RNA-seq/fastq/sample1_R2.fq.gz

以數(shù)據(jù)質(zhì)控為例

#接前面的RNA-seq.sh
mkdir -p $path/1.QC
cd $path/1.QC 

#$(cat config) 的作用是將config文件的內(nèi)容輸出,然后這個輸出會被用在for循環(huán)中蝗羊,依次賦值給循環(huán)變量i
#使用$引用變量藏澳,其中每一行(i) 代表一個元素。每個元素中的第1個字符為樣本名耀找,其索引為0(即[0])翔悠,依次為_R1.fq.gz([1])和_R2.fq.gz([2])
for i in $(cat config)
do
    echo $i
    arr=($i)
    fq1=${arr[1]}
    fq2=${arr[2]}
    sample=${arr[0]}
      fastqc fq1 fq2 -o $path/1.QC
done

常用的還有while循環(huán)語句。只要條件成立,則反復(fù)循環(huán)凉驻,不成立即停止
while語句結(jié)構(gòu)
while 條件測試操作
do
命令
done
可以用while循環(huán)實現(xiàn)上述for循環(huán)的操作

#|:是管道操作符腻要,它將前一個命令的輸出作為后一個命令的輸入。while循環(huán)會不斷地讀取來自管道的輸入涝登,并將每一行的內(nèi)容賦值給變量 i
cat ./config | while read i
do
    echo $i
    arr=($i)
    fq1=${arr[1]}
    fq2=${arr[2]}
    sample=${arr[0]}
      fastqc fq1 fq2 -o $path/1.QC
done

在數(shù)據(jù)處理過程中通常還會用到if-else條件判斷語句
if語句是Linux中最基本的條件控制語句雄家,其語法結(jié)構(gòu)為
if [ condition ]
then
command1
command2
...
else
command3
command4
...
fi

output_dir="/home/RNA-seq/1.QC
cat ./config | while read i
do
    echo $i
    arr=($i)
    fq1=${arr[1]}
    fq2=${arr[2]}
    sample=${arr[0]}
    
    # 運行FastQC
    fastqc $fq1 $fq2 -o $output_dir
    
    # 定義FastQC報告文件路徑,其中basename命令可以去除fq1的路徑和fq.gz后綴只保留樣本名胀滚,例如C1_R1趟济、C2_R2等。$(...) 是命令替換的語法結(jié)構(gòu)咽笼,用于執(zhí)行括號內(nèi)的命令顷编,并將命令的輸出作為字符串插入當前位置,例如C1_R1_fastqc.html
    report1="${output_dir}/$(basename $fq1 .fq.gz)_fastqc.html"
    report2="${output_dir}/$(basename $fq2 .fq.gz)_fastqc.html"
    
    # 使用if語法結(jié)構(gòu)檢查FastQC報告文件是否生成成功剑刑。其中[[...]]用于條件判斷媳纬,-f用于檢查文件是否存在并且是一個普通文件。這里檢查兩個報告文件 report1 和 report2 是否都存在施掏。$這里是引用變量
    if [ [-f "$report1"  &&  -f "$report2" ]]
    then
         echo "FastQC reports generated successfully for sample $sample:"
    else
        echo "Error: FastQC reports not found for sample $sample. Quality control failed."
    fi
done

還有嵌套if語句可以判斷多個條件并執(zhí)行相應(yīng)的代碼塊
if [ condition1 ]
then
command1
elif [ condition2 ]
then
command2
elif [ condition3 ]
then
command3
else
command4
fi

這一部分相對來說較為復(fù)雜钮惠,但卻是數(shù)據(jù)分析過程中必不可少的部分。接下來我將介紹基于正則表達式的Linux進階命令七芭,即awk素挽、grep、sed狸驳,三個強大的文本處理利器

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載预明,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。
  • 序言:七十年代末耙箍,一起剝皮案震驚了整個濱河市撰糠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌辩昆,老刑警劉巖阅酪,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異卤材,居然都是意外死亡遮斥,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門扇丛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來术吗,“玉大人,你說我怎么就攤上這事帆精〗嫌欤” “怎么了隧魄?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長隘蝎。 經(jīng)常有香客問我购啄,道長,這世上最難降的妖魔是什么嘱么? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任狮含,我火速辦了婚禮,結(jié)果婚禮上曼振,老公的妹妹穿的比我還像新娘几迄。我一直安慰自己,他們只是感情好冰评,可當我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布映胁。 她就那樣靜靜地躺著,像睡著了一般甲雅。 火紅的嫁衣襯著肌膚如雪解孙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天抛人,我揣著相機與錄音弛姜,去河邊找鬼。 笑死函匕,一個胖子當著我的面吹牛娱据,可吹牛的內(nèi)容都是我干的蚪黑。 我是一名探鬼主播盅惜,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼忌穿!你這毒婦竟也來了抒寂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤掠剑,失蹤者是張志新(化名)和其女友劉穎屈芜,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體朴译,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡井佑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了眠寿。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片躬翁。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖盯拱,靈堂內(nèi)的尸體忽然破棺而出盒发,到底是詐尸還是另有隱情例嘱,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布宁舰,位于F島的核電站拼卵,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蛮艰。R本人自食惡果不足惜腋腮,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望壤蚜。 院中可真熱鬧低葫,春花似錦、人聲如沸仍律。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽水泉。三九已至善涨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間草则,已是汗流浹背钢拧。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留炕横,地道東北人源内。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像份殿,于是被迫代替她去往敵國和親膜钓。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容