首页 > 代码库 > 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