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