1. 程式人生 > >生信(七)生信中常用命令

生信(七)生信中常用命令

今天將生信工作中的一些常用命令記錄(分享)如下: (以後會不定期更新)

轉換dos/windows格式的bed檔案為unix格式 (說明:我們拿到的bed檔案時常是客戶在Windows系統下編輯好的,其行尾是\r\n,在進行NGS分析前最好將其轉換為Unix風格的行尾\n。) 在這裡插入圖片描述 可以看出上面的dos.bed.txt是一個dos風格(^MKaTeX parse error: Can't use function '\r' in math mode at position 3: ,即\̲r̲\n結尾)的檔案。要想轉換成u…,即\n結尾)的檔案,當然可以用dos2unix命令來完成:

 dos2unix –n dos.bed.txt unix.bed.txt

在這裡插入圖片描述 可以看到轉換成功。問題在於dos2unix命令往往不是系統預設安裝的,你要自行安裝後才可以使用。一個替代的方法是用sed命令。

sed ‘s/\r//’ dos.bed.txt > unix.bed.txt

在這裡插入圖片描述 可以看到,轉換效果是一樣的。

批量刪除一個目錄及其子目錄下的bam檔案

find your_path –name *.bam –exec rm {} \;

在這裡插入圖片描述

合併兩個fastq檔案

cat fastq1 fastq2 > merged_fastq

獲取fastq檔名字首 (假設fastq檔名是test.r1.fq.gz,我們想得到其字首test)

your_string | cut –d. –f1

在這裡插入圖片描述 或者:

your_string | sed ‘s/\..*//’

在這裡插入圖片描述 或者:

your_string | awk –F. ‘{print $1}’

在這裡插入圖片描述 或者(如果是在指令碼中實現這一功能的話): 利用shell中的字串變數刪除功能 ${var%%} 來實現。 在這裡插入圖片描述

打包並壓縮專案檔案

tar zcvf tar_file origin_files

列印行號

sed ‘=’ your_file | sed ‘N;s/\n/\t/’

在這裡插入圖片描述 或者:

awk ‘{printf(“%d\t%s\n”, NR, $0)}’ your_file

在這裡插入圖片描述

輸出指定的行數 (比如第666行)

sed –n ‘666p;666d’ your_file

在這裡插入圖片描述 或者:

awk ‘NR==666{print $0; exit}’ your_file

在這裡插入圖片描述

統計不重複的基因個數 (假設基因名在第一列)

awk ‘{print $1}’ your_file | sort -u | wc –l

在這裡插入圖片描述 或者

awk ‘{a[$1]++} END {print length(a)}’ your_file

在這裡插入圖片描述

找出表達量最高的基因 (假設基因名在第一列,表達量資料在第四列)

sort –k4,4nr your_file | head -1 | cut –f1

在這裡插入圖片描述 或者(如果僅僅是找出最高表達量的基因,下面的方法更快!因為它不對所有記錄排序):

awk ‘{if(max<$4){max=$4;gene=$1}} END {print gene}’ your_file

在這裡插入圖片描述

列印最後一列

awk ‘{print $NF}’ your_file

反向互補序列 (如”agctn”的反向互補序列應該是”nagct”)

your_string | tr ‘agctnAGCTN’ ‘tcganTCGAN’ | rev

在這裡插入圖片描述

或者:

your_string | sed ‘y/agctnAGCTN/tcganTCGAN/’ | rev

在這裡插入圖片描述

求取某一列平均值 (假設求第四列的平均值)

awk ‘{x+=$4} END {print x/NR}’ your_file

在這裡插入圖片描述 如果是壓縮檔案,則需利用zcat來生成“流”:

zcat your_zipped_file | awk ‘{x+=$4} END {print x/NR}’

獲取指令碼檔案所在目錄的絕對路徑假設你有一個指令碼test.sh,你想在該腳本里寫幾行程式碼獲取test.sh所在目錄的絕對路徑)

abs_path=$(cd “$(dirname “$0”)”; pwd)
echo $abs_path

在這裡插入圖片描述

對bed檔案排序 (假設依次按照前三列進行排序)

sort –k1,1V –k2,2n –k3,3n unsort.bed > sort.bed

最後提一句:從上面的諸多例子中,我們可以看出,sed與awk的威力。它們與grep並稱Linux下的“三劍客”,牛叉哄哄!

如果有任何意見或建議,歡迎留言!

公眾號:生信了 在這裡插入圖片描述