学生信的那些事儿之十四 - 生信技能树fasta和fastq格式文件的shell小练习20题

第18题和第20题不会做,求高手指教啊~~

该练习使用的数据为bowtie2中的示例数据,获取方法如下:

# 下载bowtie2软件先
wget -c https://sourceforge.net/projects/bowtie-bio/files/bowtie2/2.3.5.1/bowtie2-2.3.5.1-linux-x86_64.zip
unzip bowtie2-2.3.5.1-linux-x86_64.zip
# 找到示例数据
cd bowtie2-2.3.5.1-linux-x86_64/example/reads
  1. 统计reads_1.fq 文件中共有多少条序列信息
# fq文件格式有4行,均以@打头,统计@字符的数量即可 (此处有坑,字符@需要再行首)
less -S reads_1.fq | grep "^@" | wc
  1. 输出所有的reads_1.fq文件中的标识符(即以@开头的那一行)
# 筛选出来后重定向
less -S reads_1.fq | grep "^@" > head.txt
  1. 输出reads_1.fq文件中的 所有序列信息(即每个序列的第二行)
# fq格式中的第二行为碱基序列,观察数据格式
less reads_1.fq | paste -d " " - - - - | less -SN | awk '{print$2}' > sequence.txt
  1. 输出以‘+’及其后面的描述信息(即每个序列的第三行)
# 每个序列的第三行不是除了+都是空的咩
less reads_1.fq | paste -d " " - - - - | less -SN | awk '{print$3}' > line3.txt
  1. 输出质量值信息(即每个序列的第四行)
# 命令跟上面差不多
less reads_1.fq | paste -d " " - - - - | less -SN | awk '{print$4}' > line4.txt
  1. 计算reads_1.fq文件含有N碱基的reads个数
# 要用到上面生成的sequence.txt文件
less -SN sequence.txt | grep N | wc
  1. 统计文件中reads_1.fq文件里面的序列的碱基总数
# 还是要用到sequence.txt文件
cat sequence.txt | grep -o -i "[atcgn]" | wc
  1. 计算reads_1.fq所有的readsN碱基的总数
# 很有必要再复习一下grep的各个参数的功能
cat sequence.txt | grep -o N | wc
  1. 统计reads_1.fq中测序碱基质量值恰好为Q20的个数
# Q20对应的ASCII值为5,质量值在第4行
cat line4.txt | grep -o 5 | wc
  1. 统计reads_1.fq中测序碱基质量值恰好为Q30的个数
# Q30对应的ASCII值为?,质量值在第4行
cat line4.txt | grep -o ? | wc
  1. 统计reads_1.fq中所有序列的第一位碱基的ATCGNatcg分布情况
# 筛选出来然后计数
less -S sequence.txt | cut -c-1 | sort | uniq -c
  1. reads_1.fq 转为reads_1.fa文件(即将fastq转化为fasta)
# 需明确.fq文件和.fa文件的异同。可知只需提取.fq文件前两行,然后把"@"替换为">"即可,如下:
less reads_1.fq | paste - - - - | awk '{print $1,$2}' | tr " " "\n" | tr "@" ">" > reads_1.fa
  1. 统计上述reads_1.fa文件中共有多少条序列
# 相对.fq文件来说就更简单了
cat reads_1.fa | grep "^>" | wc 
  1. 计算reads_1.fa文件中总的碱基序列的GC数量
cat reads_1.fa | grep -o GC | wc 
  1. 删除 reads_1.fa文件中的每条序列的N碱基
# 终于sed出场
cat reads_1.fa | sed 's/[nN]/""/g' > reads_1_non.fa 
  1. 删除 reads_1.fa文件中的含有N碱基的序列
# 先找到含有N的序列,然后删除
cat reads_1.fa | grep -i -v n > reads_1_qual.fa 
  1. 删除 reads_1.fa文件中的短于65bp的序列
# 得复习awk语法了啊, 删除短于65bp的,那就选择长于65bp的
cat reads_1.fa | paste - - | awk '{if(length($2)>65)print}' | tr "\t " "\n" > reads_1_65.fa
  1. 删除 reads_1.fa文件每条序列的前后五个碱基
# 看网上有人用下面的命令,实测是错误的
cat reads_1.fa | paste - - | cut -f 2 | cut -c 5- | cut -c -5 > reads_1_trim.fa
# 正确的是什么样的?
??????
  1. 删除 reads_1.fa文件中的长于125bp的序列
# 跟17题原理一样,筛选长度小于125bp的序列
cat reads_1.fa | paste - - | awk '{if(length($2)<125) print}' | tr "\t " "\n" > reads_1_125.fa
  1. 查看reads_1.fq 中每条序列的第一位碱基的质量值的平均值
# 思路应该是提取出条序列第一个碱基对应的质量值,然后换算成可计算的数值,然后加和求平均数(吧)?可是怎么转换成数字呢```
cat reads_1.fa | paste - - - - | awk '{print $4}' | cut -c -1 > reads_1.l4.fa

每天都有新的收获的感觉很棒~

你可能感兴趣的:(学生信的那些事儿之十四 - 生信技能树fasta和fastq格式文件的shell小练习20题)