一些实用的生信单行命令

基本awk和sed命令

从文件中提取2,4,5列:

awk '{print $2,$4,$5}' input.txt

输出第五列中包含abc123的行:

awk '$5 == "abc123"' file.txt

输出第五列中不包含abc123的行:

awk '$5 != "abc123"' file.txt

输出第七列中符合正则表达式规则(以a-f中任一字母开头)的行:

awk '$7  ~ /^[a-f]/' file.txt

输出第七列中不符合正则表达式规则(以a-f中任一字母开头)的行:

awk '$7 !~ /^[a-f]/' file.txt

根据第二列去除重复行并输出唯一行:

awk '!arr[$2]++' file.txt

输出第三列大于第五列的行:

awk '$3>$5' file.txt

对file.txt中的第一列求和:

awk '{sum+=$1} END {print sum}' file.txt

计算第二列的均值:

awk '{x+=$2}END{print x/NR}' file.txt

将所有的foo替换为bar:

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

去除行首空格或制表符:

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

去除行首和行尾的空格和制表符:

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

删除空白行:

sed '/^$/d' file.txt

删除包含EndOfUsefulData的行之后的所有内容:

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

维持原始顺序同时删除重复项:

awk '!visited[$0]++' file.txt

生信中实用的awk和sed命令

输出1号染色体上处于1MB和2MB之间的行:

# bed格式
cat file.bed | awk '$1=="1"' | awk '$3>=999999' | awk '$3<=1999999'
# gff格式
cat file.gff | awk '$1=="1"' | awk '$5>=1000000' | awk '$5<=2000000'

统计fastq文件的一些基本信息,包括reads数量、唯一的reads数、唯一reads的比例、出现频率最多的序列及频数和所占比例:

cat 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}'

将bam文件转为fastq:

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

输出blast结果中最高得分的结果:

awk '{ if(!x[$1]++) {print $0; bitscore=($14-1)} else { if($14>bitscore) print $0} }' blastout.txt

将含多条序列的fasta文件分割为多个fasta文件(每条序列一个文件):

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

输出fasta文件中每条序列的序列名及其长度:

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

将fastq文件转为fasta文件:

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

从fastq文件中提取序列:

sed -n '2~4p' file.fq

输出除第一行外的所有内容:

awk 'NR>1' input.txt

输出20-80行的内容:

awk 'NR>=20&&NR<=80' input.txt

计算第二列和第三列之和并将结果置于行尾:

awk '{print $0,$2+$3}' input.txt

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

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

将vcf文件转为bed文件:

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

根据reads名从fastq文件中提取指定reads:

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

统计vcf中每行丢失的样本数:

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

sort, uniq, cut 命令

对文件中的每一行编号:

cat -n file.txt

统计文件中唯一行的数量:

cat file.txt | sort -u | wc -l

查找两个文件中相同的行:

sort file1 file2 | uniq -d

# Safer
sort -u file1 > a
sort -u file2 > b
sort a b | uniq -d

# Use comm
comm -12 file1 file2

按第九列进行数字排序:

sort -gk9 file.txt

查找第二列中出现最多的字符串:

cut -f2 file.txt | sort | uniq -c | sort -k1nr | head

从文件中随机选择10行:

shuf file.txt | head -n 10

输出所有可能的3mer DNA序列组合:

echo {A,C,T,G}{A,C,T,G}{A,C,T,G}

将合并的paired-end fastq文件拆分为-1和-2 两个fastq文件:

cat interleaved.fq |paste - - - - - - - - | tee >(cut -f 1-4 | tr "\t" "\n" > deinterleaved_1.fq) | cut -f 5-8 | tr "\t" "\n" > deinterleaved_2.fq

find, xargs, 和 GNU parallel 命令

GNU parallel 下载地址:https://www.gnu.org/software/parallel/
在当前目录中递归搜索bam文件:

find . -name "*.bam"

删除所有的bam文件:

find . -name "*.bam" | xargs rm

将所有的txt文件重命名成bak文件:

find . -name "*.txt" | sed "s/\.txt$//" | xargs -i echo mv {}.txt {}.bak | sh

同时运行12个FASTQC 任务:

find *.fq | parallel -j 12 "fastqc {} --outdir ."

将bam文件建索引(进输出命令,并不运行程序):

find *.bam | parallel --dry-run 'samtools index {}'

seqtk

Seqtk是一种快速处理FASTA或FASTQ格式序列的工具。它也可以读取gzip压缩过的FASTA和FASTQ文件。下载地址:https://github.com/lh3/seqtk

将fastq转为fasta格式:

seqtk seq -a in.fq.gz > out.fa

将fastq文件中的质量值低于20的序列屏蔽掉并转为fasta格式:

# 将序列屏蔽为小写
seqtk seq -aQ64 -q20 in.fq > out.fa
# 将序列屏蔽为N
seqtk seq -aQ64 -q20 -n N in.fq > out.fa

将fasta和fastq文件格式化为每行60个字符的多行序列并去除注释信息:

seqtk seq -Cl60 in.fa > out.fa

将多行的fastq文件转为4行的fastq文件:

seqtk seq -l0 in.fq > out.fq

生成fastq或fasta的反向互补序列:

seqtk seq -r in.fq > out.fq

根据name.lst(每行一个序列名)中的序列名提取序列:

seqtk subseq in.fq name.lst > out.fq

提取reg.bed文件中所含区域的序列:

seqtk subseq in.fa reg.bed > out.fa

将reg.bed文件中所含区域的序列屏蔽为小写:

seqtk seq -M reg.bed in.fa > out.fa

使用Phred算法从两端修剪低质量的碱基:

seqtk trimfq in.fq > out.fq

从每条read的左端修剪5bp,从右端修剪10bp:

seqtk trimfq -b 5 -e 10 in.fa > out.fa

将合并的paired-end fastq文件拆分为-1和-2 两个fastq文件:

seqtk seq -l0 -1 interleaved.fq > deinterleaved_1.fq
seqtk seq -l0 -2 interleaved.fq > deinterleaved_2.fq

GFF3 文件

输出所有在gff3文件中注释的序列:

cut -s -f 1,9 yourannots.gff3 | grep $'\t' | cut -f 1 | sort | uniq

统计gff3中的基因数量:

grep -c $'\tgene\t' yourannots.gff3

提取gff3中所有的基因ID:

grep $'\tgene\t' yourannots.gff3 | perl -ne '/ID=([^;]+)/ and printf("%s\n", $1)'

输出gff3中所有的基因长度:

grep $'\tgene\t' yourannots.gff3 | cut -s -f 4,5 | perl -ne '@v = split(/\t/); printf("%d\n", $v[1] - $v[0] + 1)'

参考

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,569评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,499评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,271评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,087评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,474评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,670评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,911评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,636评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,397评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,607评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,093评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,418评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,074评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,092评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,865评论 0 196
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,726评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,627评论 2 270

推荐阅读更多精彩内容