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
