首页 > 代码库 > linux awk常用操作(快速将fasta格式的序列改成一行显示)

linux awk常用操作(快速将fasta格式的序列改成一行显示)

Some time when you want to change the fasta seq into one line

For awk:

        awk ‘/^>/&&NR>1{print "";}{ printf "%s",/^>/ ? $0" ":$0 }‘  YourFile > newfilename

For sed:

            sed -n ‘1{x;d;x};${H;x;s/\n/ /1;s/\n//g;p;b};/^>/{x;s/\n/ /1;s/\n//g;p;b};H‘ YourFile > newfilename

Today, I want to extract contig which is more 500bp from my aseembly result, So I do that as following:

            sed -n ‘1{x;d;x};${H;x;s/\n/ /1;s/\n//g;p;b};/^>/{x;s/\n/ /1;s/\n//g;p;b};H‘ |awk ‘{if (length($5)>500 ) print ">contig-"FNR"\n"$5}‘

awk行号常用操作:

1. 每行间加一个空行:

                          awk ‘1; { print "" }‘   filname.ext             #输出当前行,在输出一个空行

2.计算行数:效果类似wc -l:

                          awk ‘END { print NR }‘   filname.ext            #END表示每行都处理完了后,在执行,此时NR就是最后一行的行号,也就是总的行数了

3.计算每一行的和:

                          awk ‘{ s = 0; for (i = 1; i <= NF; i++) s = s+$i; print s }‘   filname.ext 

4.计算文件中所有字段的和:

                         awk ‘{ for (i = 1; i <= NF; i++) s = s+$i }; END { print s }‘   filname.ext  #s用作总和的累加,每行都处理完成了,再输出s;注意和

                对比,此处没有每行清零,所以累加了。没有设置的变量,默认为空,但是会根据上下文数值计算情况自动变为0

5.计算文件中总的字段和(例如计算单词数):

                         awk ‘{ total = total + NF }; END { print total }‘   filname.ext

原文链接:http://www.plob.org/2011/03/18/97.html