<code id="ac40c"><samp id="ac40c"></samp></code>
<bdo id="ac40c"></bdo>
<code id="ac40c"><samp id="ac40c"></samp></code>
  • <small id="ac40c"><samp id="ac40c"></samp></small>

    分享

    更多

       

    生信小技巧:实用的one-liners命令(1)

    2018-08-22  微笑如酒

    当你处理NGS文本信息时,相信你不多不少也有遇到过类似的烦恼,例如不知道如何只提取gene ID的名字,或者只提取gff file中某一列的某一行,?#21482;?#32773;想自己在每一行中添加一些你想要的信息。这时候如果你会编程,写一个脚本,这都不是什么问题。当然如果你编程不是很过关,掌握一些实用的one-liners命令,往往会事半功倍,帮助你实现一些简单的文本操作。

    本文给大家分享一些实用的one-liners命令,如果觉得实用欢迎收藏与转发。

    基本的awk命令

    提取一个文本中第2,4,和5?#23567;?/p>

    awk '{print $2,$4,$5}' input.txt
    #对比cut,awk会相对更加好用。

    提取第五列中等于0的所?#34892;校?/p>

    awk '$5 == '0'' file.txt

    提取第五列中不等于0的所?#34892;校?/p>

    awk '$5 != '0'' file.txt

    根据第二列的字符串来提取unique的文本内容,即去重(只提取第一个unique字符串的那一行)

    awk '!arr[$2]++' file.txt
    #类似sort -u,不过 可以精准到你想以那一行的字符串来进行去重复

    提取出第三列大于第五列的行数:

    awk '$3>$5' file.txt

    ##当然也可以提取出大于每个值得行,可以用于提取大于某个长度的gene的那一?#23567;?/span>
    awk '$3> 500' file.txt

    求第一列的和:

    awk '{sum+=$1} END {print sum}' file.txt
    #可用于计算基因长度的总和等

    求第二列数值的平均值,

    awk '{x+=$2}END{print x/NR}' file.txt
    #可以用来求基因长度平均值

    基本的sed命令

    把文件中所有的foo替代成bar

    sed 's/foo/bar/g' file.txt

    去除文件中开头的空格或者tab字符:

    sed 's/^[ \t]*//' file.txt

    去除文件中结尾的空格或者tab字符:

    sed 's/[ \t]*$//' file.txt

    同时去除文件开头与结尾的空格或者tab字符:

    sed 's/^[ \t]*//;s/[ \t]*$//' file.txt

    删除文本中的空白行

    sed '/^$/d' file.txt
    #?#34892;?#24037;具不接受有空白行的输入文件

    删除文件中行中包含abc的行及其这行以后的所?#34892;校?/p>

    sed -n '/abc/,$!p' file.txt

    生物信息中的awk和sed

    提取file.txt中 Chr1 中1MB和2MB的片段之间的行信息,假设第一列是Chr信息,第三列是位置信息:

    cat file.txt | awk '$1=='1'' | awk '$3>=1000000' | awk '$3<>

    统计fastq文件中基本的参数,包括总的reads数目,总的unique reads的数目(就是不重复的reads),这些unique reads的比例,最过剩的read的序列及其数目与占总的reads的比?#21097;?/p>

    at myfile.fq | awk '((NR-2)%4==0){read=$1;total++;count[read]++}END{for(read in count){if(!max||count[read]>max) {max=count[read];maxRead=read};if(count[read]==1){unique++}};print total,unique,unique*100/total,maxRead,count[maxRead],count[maxRead]*100/total}'
    #拿到raw data来统计时候很实用

    将bam格式的文件转化为fastq格式:

    samtools view file.bam | awk 'BEGIN {FS='\t'} {print '@' $1 '\n' $10 '\n+\n' $11}' > file.fq

    将一个multi-FASTA 分成多个的单个FASTA文件:

    awk '/^>/{s=++d'.fa'} {print > s}' multi.fa

    将fastq文件转变成fa文件:

    sed -n '1~4s/^@/>/p;2~4p' file.fq > file.fa

    输出fasta文件中每一个序列的header名字与其的长度

    cat file.fa | awk '$0 ~ '>' {print c; c=0;printf substr($0,2,100) '\t'; } $0 !~ '>' {c+=length($0);} END { print c; }'

    输出制定的行数:

    #例如20到80行
    awk 'NR>=20&&NR<> input.txt

    转化 VCF file 成BED file:

    sed -e 's/chr//' file.vcf | awk '{OFS='\t'; if (!/^#/){print $1,$2-1,$2,$4'/'$5,'+'}}'

    计算vcf 中 每一个line的missing样本数目:

    bcftools query -f '[%GT\t]\n' a.bcf |  awk '{miss=0};{for (x=1; x<>$x=='./.') {miss+=1}};{print miss}' > nmiss.count

    根据reads的名字,提取fastq中的reads:

    zcat a.fastq.gz | awk 'BEGIN{RS='@';FS='\n'}; $1~/readsName/{print $2; exit}'

    计算fastq文件中reads 长度的平均值:

    awk 'NR%4==2{sum+=length($0)}END{print sum/(NR/4)}' input.fastq

    本次主要讲sed 和 awk 两大神器,下周会更新其他实用的one-liners command,希望对大家有帮助,如果大家也有其他实用的one-liners command?#19981;?#36814;大?#20197;?#22238;复栏中分享你收藏的command。

        

  • 青海11选5今日开奖结果走势图
    <code id="ac40c"><samp id="ac40c"></samp></code>
    <bdo id="ac40c"></bdo>
    <code id="ac40c"><samp id="ac40c"></samp></code>
  • <small id="ac40c"><samp id="ac40c"></samp></small>
    <code id="ac40c"><samp id="ac40c"></samp></code>
    <bdo id="ac40c"></bdo>
    <code id="ac40c"><samp id="ac40c"></samp></code>
  • <small id="ac40c"><samp id="ac40c"></samp></small>