fasta和fastq格式文件的shell小練習(xí)

作業(yè)中參考了:http://www.reibang.com/p/bc1fe435879c

http://www.reibang.com/p/d10a85f21889

http://ddrv.cn/a/185067

http://www.huanyujianshe.com/p/41b8c87ab9c5

這個(gè)是有機(jī)結(jié)合生物信息學(xué)的linux和數(shù)據(jù)格式的練習(xí)題:
下載bowtie2軟件后拿到示例數(shù)據(jù):

mkdir -p ~/biosoft
cd ~/biosoft
wget https://sourceforge.net/projects/bowtie-bio/files/bowtie2/2.3.4.3/bowtie2-2.3.4.3-linux-x86_64.zip 
unzip bowtie2-2.3.4.3-linux-x86_64.zip 
cd ~/biosoft/bowtie2-2.3.4.3-linux-x86_64/example/reads 

1)統(tǒng)計(jì)reads_1.fq 文件中共有多少條序列信息

wc -l reads_1.fq
cat reads_1.fq | paste - - - - |wc -l
11.png

fq文件的特點(diǎn)是:每四行代表一條序列,所以應(yīng)計(jì)算文件中一共有多少行遂黍,再除以4便是序列信息了典尾。

paste - - - -的作用是蹦渣,把四行剪切粘貼成一行
paste的用法

paste [-s][-d <間隔字符>][--help][--version][文件...]

參數(shù)

-d<間隔字符>或--delimiters=<間隔字符>哩掺,用指定的間隔字符取代跳格字符

-s或--serial ,串列進(jìn)行而非平行處理徽级,則可以將一個(gè)文件中的多行數(shù)據(jù)合并為一行進(jìn)行顯示

2)輸出所有的reads_1.fq文件中的標(biāo)識符(即以@開頭的那一行)

cat reads_1.fq | paste - - - - |cut -f 1
  1. 輸出reads_1.fq文件中的 所有序列信息(即每個(gè)序列的第二行)
cat reads_1.fq | paste - - - - | cut -f2

4)輸出以‘+’及其后面的描述信息(即每個(gè)序列的第三行)

cat reads_1.fq | paste - - - - | cut -f3

5)輸出質(zhì)量值信息(即每個(gè)序列的第四行)

cat reads_1.fq | paste - - - - | cut -f4
  1. 計(jì)算reads_1.fq 文件含有N堿基的**reads個(gè)數(shù)
(base) lchen@VM-0-8-ubuntu:~/biosoft/bowtie2-2.3.4.3-linux-x86_64/example/reads$ cat reads_1.fq | paste - - - - | cut -f 2| grep "N" |wc -l
6429
(base) lchen@VM-0-8-ubuntu:~/biosoft/bowtie2-2.3.4.3-linux-x86_64/example/reads$ awk '{if(NR%4==2)print}' reads_1.fq | grep -c N
6429
(base) lchen@VM-0-8-ubuntu:~/biosoft/bowtie2-2.3.4.3-linux-x86_64/example/reads$ awk '{if(NR%4==2)print}' reads_1.fq |grep -c N
6429
(base) lchen@VM-0-8-ubuntu:~/biosoft/bowtie2-2.3.4.3-linux-x86_64/example/reads$ awk '{if(NR%4==2)print}' reads_1.fq | grep  N |wc
   6429    6429  782897

less命令
-N 顯示每行的行號

-S 行過長時(shí)間將超出部分舍棄

awk命令

NR 表示 已經(jīng)讀出的記錄數(shù)察蹲,就是行號,從1開始

%4除以4

  1. 統(tǒng)計(jì)文件中reads_1.fq文件里面的序列的堿基總數(shù)
(base) lchen@VM-0-8-ubuntu:~/biosoft/bowtie2-2.3.4.3-linux-x86_64/example/reads$ cat reads_1.fq |paste - - - - |cut -f2| wc
  10000   10000 1098399
(base) lchen@VM-0-8-ubuntu:~/biosoft/bowtie2-2.3.4.3-linux-x86_64/example/reads$ cat reads_1.fq |paste - - - - |
cut -f2 | grep -o "[ATCGN]" |wc -l
1088399
(base) lchen@VM-0-8-ubuntu:~/biosoft/bowtie2-2.3.4.3-linux-x86_64/example/reads$ awk '{if(NR%4==2)print}' reads_1.fq | grep -o [ATCGN]| wc -l
1088399
(base) lchen@VM-0-8-ubuntu:~/biosoft/bowtie2-2.3.4.3-linux-x86_64/example/reads$ awk '{if(NR%4==2)print length}' reads_1.fq | paste -s -d + | bc
1088399

思路:每條序列都是有長度的绒净,若把所有序列長度加起來见咒,就是序列的堿基總數(shù),length參數(shù)會輸出每條reads的堿基總數(shù)挂疆,再把它們?nèi)悠饋砭褪菈A基總數(shù)改览。

paste命令在此起相加的作用$脱裕可用于合并文件的列宝当,會把每個(gè)文件以列對列的方式,一列列地加以合并胆萧。

-s庆揩,可以將一個(gè)文件中的多行數(shù)據(jù)合并為一行進(jìn)行顯示

bc命令用于相加

8)計(jì)算reads_1.fq 所有的reads中N堿基的總數(shù)

(base) lchen@VM-0-8-ubuntu:~/biosoft/bowtie2-2.3.4.3-linux-x86_64/example/reads$ awk '{if(NR%4==2)print}' reads_1.fq | grep -o N |wc
  26001   26001   52002
(base) lchen@VM-0-8-ubuntu:~/biosoft/bowtie2-2.3.4.3-linux-x86_64/example/reads$  awk '{if (NR%4==2) print}' reads_1.fq | grep -o N |wc
  26001   26001   52002

9)統(tǒng)計(jì)reads_1.fq 中測序堿基質(zhì)量值恰好為Q20的個(gè)數(shù)

22.png

(base) lchen@VM-0-8-ubuntu:~/biosoft/bowtie2-2.3.4.3-linux-x86_64/example/reads$ awk '{if(NR%4==0)print}' reads_1.fq | grep -o 5 |wc
  21369   21369   42738
 10)統(tǒng)計(jì)**reads_1.fq** 中測序**堿基質(zhì)量值**恰好為`Q30`的個(gè)數(shù)  ```
```bash
(base) lchen@VM-0-8-ubuntu:~/biosoft/bowtie2-2.3.4.3-linux-x86_64/example/reads$ awk '{if(NR%4==0)print}' reads_1.fq | grep -o ? |wc
  21574   21574   43148
(base) lchen@VM-0-8-ubuntu:~/biosoft/bowtie2-2.3.4.3-linux-x86_64/example/reads$ cat reads_1.fq| paste - - - - |grep -o ? |wc
  21574   21574   43148

grep命令
-o 或 --only-matching** : 只顯示匹配PATTERN 部分。

11)統(tǒng)計(jì)reads_1.fq 中所有序列的第一位堿基的ATCGNatcg分布情況

(base) lchen@VM-0-8-ubuntu:~/biosoft/bowtie2-2.3.4.3-linux-x86_64/example/reads$ awk '{if(NR%4==2)print}' reads_1.fq | cut -c1| sort | uniq -c
   2184 A
   2203 C
   2219 G
   1141 N
   2253 T
(base) lchen@VM-0-8-ubuntu:~/biosoft/bowtie2-2.3.4.3-linux-x86_64/example/reads$ cat reads_1.fq| paste - - - - |cut -f2|cut -c1 |sort|uniq -c
   2184 A
   2203 C
   2219 G
   1141 N
   2253 T

cut命令

可以將一串字符作為列來顯示鸳碧,字符字段的記法:

  • N-:從第N個(gè)字節(jié)盾鳞、字符、字段到結(jié)尾瞻离;

  • N-M:從第N個(gè)字節(jié)腾仅、字符、字段到第M個(gè)(包括M在內(nèi))字節(jié)套利、字符推励、字段鹤耍;

  • -M:從第1個(gè)字節(jié)、字符验辞、字段到第M個(gè)(包括M在內(nèi))字節(jié)稿黄、字符、字段跌造。

上面是記法杆怕,結(jié)合下面選項(xiàng)將摸個(gè)范圍的字節(jié)、字符指定為字段:

  • -b 表示字節(jié)壳贪;

  • -c 表示字符陵珍;

  • -f 表示定義字段。

12)將reads_1.fq 轉(zhuǎn)為reads_1.fa文件(即將fastq轉(zhuǎn)化為fasta)

fastq與fasta的差別


[圖片上傳中...(44.png-4bb799-1578745528466-0)]

44.png
(base) lchen@VM-0-8-ubuntu:~/biosoft/bowtie2-2.3.4.3-linux-x86_64/example/reads$  cat reads_1.fq| paste - - - - |cut -f1,2| tr '\t' 'n' | tr '@' '>' > reads_1.fa
  1. 統(tǒng)計(jì)上述reads_1.fa文件中共有多少條序列
(base) lchen@VM-0-8-ubuntu:~/biosoft/bowtie2-2.3.4.3-linux-x86_64/example/reads$ cat reads_1.fa| cut -f2 |wc -l
10000
(base) lchen@VM-0-8-ubuntu:~/biosoft/bowtie2-2.3.4.3-linux-x86_64/example/reads$ wc reads_1.fa
  10000   10000 1167293 reads_1.fa
nl reads_1.fa| grep 'r' | wc -l10000
10000

nl命令

nl命令在linux系統(tǒng)中用來計(jì)算文件中行號违施。nl 可以將輸出的文件內(nèi)容自動(dòng)的加上行號互纯!

14)計(jì)算reads_1.fa文件中總的堿基序列的GC數(shù)量

(base) lchen@VM-0-8-ubuntu:~/biosoft/bowtie2-2.3.4.3-linux-x86_64/example/reads$  cat reads_1.fa| grep -o [GC] | wc

15)刪除 reads_1.fa文件中的每條序列的N堿基

(base) lchen@VM-0-8-ubuntu:~/biosoft/bowtie2-2.3.4.3-linux-x86_64/example/reads$  cat reads_1.fa| tr -d "N"| head

16)刪除 reads_1.fa文件中的含有N堿基的序列

思路:先把兩行粘成一行,然后取出所有沒有N的序列后再變回去:把兩行變成一行磕蒲。

(base) lchen@VM-0-8-ubuntu:~/biosoft/bowtie2-2.3.4.3-linux-x86_64/example/reads$  cat reads_1.fa | paste - - | grep -v N | tr '\t' '\n'

grep -v` 取沒有匹配的行

  1. 刪除 reads_1.fa文件中的短于65bp的序列

思路:刪除短于65bp的序列 = 保留大于65bp的序列

(base) lchen@VM-0-8-ubuntu:~/biosoft/bowtie2-2.3.4.3-linux-x86_64/example/reads$ cat reads_1.fa | paste - - | awk '{if (length($2)>65) print}' |wc
   3889    7778  976030

18) 刪除 reads_1.fa文件每條序列的前后五個(gè)堿基

(base) lchen@VM-0-8-ubuntu:~/biosoft/bowtie2-2.3.4.3-linux-x86_64/example/reads$  cat reads_1.fa | paste - - | cut -f2 |cut -c 5- |  cut -c -5

cut -c 5- 從第5個(gè)堿基開始cut

cut -c -5 從倒數(shù)第5個(gè)堿基開始cut

以上兩個(gè)cut的位置在輸入時(shí)不要互換留潦,保持誰在序列的前面誰先cut

19)刪除 reads_1.fa文件中的長于125bp的序列

(base) lchen@VM-0-8-ubuntu:~/biosoft/bowtie2-2.3.4.3-linux-x86_64/example/reads$ cat reads_1.fa | paste - - | awk '{if (length($2)<125) print}'|head 
55.png

圖中圈出來的數(shù)字為序列號,表現(xiàn)為不連續(xù)辣往,證明過濾了長于125bp的序列

20)查看reads_1.fq 中每條序列的第一位堿基的質(zhì)量值的平均值

awk '{if(NR%4==0)print substr($0,1,1)}' reads_1.fq | awk '
BEGIN{for(i=0;i<256;++i) ord[sprintf("%c",i)]=i}BEGIN{count=0}{ count+=(ord[$1]-33)}END{print count,count/NR}'
163621 16.3621

或
awk '{if(NR%4==0)print substr($0,1,1)}' reads_1.fq | awk 'BEGIN{for(i=0;i<256;++i) ord[sprintf("%c",i)]=i}{print ord[$1]-33}'|paste -s -d+|bc
163621

[Linux C 字符串函數(shù) sprintf()兔院、snprintf() 詳解]

字符/Ascii碼對照

在C/C++語言中,char也是一種普通 的scalable類型站削,除了字長之外秆乳,它與short,int钻哩,long這些類型沒有本質(zhì)區(qū)別,只不過被大家習(xí)慣用來表示字符和字符串而已肛冶。

于是街氢,使用“%d”或者“%x”打印一個(gè)字符睦袖,便能得 出它的10進(jìn)制或16進(jìn)制的ASCII碼珊肃;反過來馅笙,使用“%c”打印一個(gè)整數(shù),便可以看到它所對應(yīng)的ASCII字符董习。

參考資料:
[堿基礦工] 從零開始完整學(xué)習(xí)全基因組測序數(shù)據(jù)分析:第3節(jié) 數(shù)據(jù)質(zhì)控
···bash
echo $PATH |grep -o ":"|wc
cat reads_1.fq |paste - - - - |less -SN
cat reads_1.fq |paste - - - - |cut -f 2|grep -o [ATCGNatcg]|wc

http://ascii.911cha.com/

63 ?

53 5

97 a

107 k



?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末烈和,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子招刹,更是在濱河造成了極大的恐慌,老刑警劉巖疯暑,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件训柴,死亡現(xiàn)場離奇詭異,居然都是意外死亡妇拯,警方通過查閱死者的電腦和手機(jī)幻馁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門仗嗦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人儒将,你說我怎么就攤上這事对蒲。” “怎么了蹈矮?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蝠咆。 經(jīng)常有香客問我北滥,道長刚操,這世上最難降的妖魔是什么再芋? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任济赎,我火速辦了婚禮,結(jié)果婚禮上司训,老公的妹妹穿的比我還像新娘。我一直安慰自己壳猜,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布捂蕴。 她就那樣靜靜地躺著譬涡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪啥辨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天陨瘩,我揣著相機(jī)與錄音级乍,去河邊找鬼。 笑死玫荣,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的贯卦。 我是一名探鬼主播焙贷,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼辙芍!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起庶灿,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤吃衅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體妄辩,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡眼耀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了哮伟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片妄帘。...
    茶點(diǎn)故事閱讀 38,117評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡抡驼,死狀恐怖肿仑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情尤慰,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布杯道,位于F島的核電站责蝠,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏玛歌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一创肥、第九天 我趴在偏房一處隱蔽的房頂上張望值朋。 院中可真熱鬧,春花似錦昨登、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至琐凭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間胚吁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工腕扶, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人乓搬。 一個(gè)月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓代虾,卻偏偏與公主長得像,于是被迫代替她去往敵國和親江掩。 傳聞我的和親對象是個(gè)殘疾皇子乘瓤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評論 2 345

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