これを組み合わせる方法を提案できますか?
a.fastaには、ヘッダー1、2、3、....を含む10000個のシーケンスがあります。 10000 ............. ヘッダーヘッダーが 1 つだけ含まれています。例えば
>1
AAATTTTGGGGCCC
>2
ACCCCGGGTTT
..........
>10000
ATGCCCCCCCCCC
出力:
>1
AAATTTTGGGGCCCACCCCGGGTTTATGCCCCCCCCCC
答え1
awk '
/^>/ {
# print the first header
if (c++ == 0) {print; print ""}
next
}
/^$/ {next}
{printf "%s", $0}
END {print ""}
' a.fasta > b.fasta
b.fastaの内容
>1
AAATTTTGGGGCCCACCCCGGGTTT..........ATGCCCCCCCCCC
答え2
最も簡単な方法は、最初の行だけを印刷してから、>
i)空白文字(fastaファイルとは無関係)とii)fastaヘッダー行()を含まないファイルの他のすべての行を印刷することです。
head -n 1 file.fa > newfile.fa; grep -P '^[^> ]+$' >> newfile.fa
最初の行が印刷され、grep正規表現は、行の先頭()から終わり()までのhead
文字または空白以外の文字()のみを含むすべての行を検索します。>
[^> ]
^
$
ただし、これにより次のファイルが生成されます。
>1
AAATTTTGGGGCCC
ACCCCGGGTTT
ATGCCCCCCCCCC
シーケンス全体を同じ行に入れるには、次のコマンドを使用します。
head -n 1 file.fa > newfile.fa; grep -P '^[^> ]+$' | tr -d '\n'>> newfile.fa;
その後、次のようにファイルの末尾に改行を追加できます。
echo "" >> newfile.fa
ただし、これらのファイルを使用するには、これらの2つのスクリプトを$ PATH($HOME/bin
例:)のファイルに保存して実行可能にすることをお勧めします(chmod a+x $HOME/bin/scriptname
)。
Tblをすばやく変換
このスクリプトはfastaファイルをインポートしてtbl形式に変更します(fastaヘッダー、タブ、およびシーケンスはすべて1行にあります)。
#! /bin/sh
gawk '{
if (substr($1,1,1)==">")
if (NR>1)
printf "\n%s\t", substr($0,2,length($0)-1)
else
printf "%s\t", substr($0,2,length($0)-1)
else
printf "%s", $0
}END{printf "\n"}' "$@"
TblToFasta
一方、このファイルはtbl形式のファイルを受け取り、適切なfastaファイル(>
タイトルと1行につき60文字)に変換します。
#! /bin/sh
gawk '{
sequence=$NF
ls = length(sequence)
is = 1
fld = 1
# if (fld == 1){printf ">"}
while (fld < NF)
{
if (fld == 1){printf ">"}
printf "%s " , $fld
if (fld == NF-1)
{
printf "\n"
}
fld = fld+1
}
while (is <= ls)
{
printf "%s\n", substr(sequence,is,60)
is=is+60
}
}' "$@"
これらのスクリプトが利用可能になったら、次のコマンドを実行して目的のタスクを実行できます。
$ head -n 1 file.fa; FastaToTbl file.fa | awk -F"\t" '{print $2}'
>1
AAATTTTGGGGCCC
ACCCCGGGTTT..........
ATGCCCCCCCCCC
または正しいfastaファイルを取得するには:
$ head -n 1 file.fa > newfile; FastaToTbl file.fa |
awk -F"\t" '{printf "%s", $2}' | TblToFasta >> newfile
次を生成します。
>1
AAATTTTGGGGCCCACCCCGGGTTT..........ATGCCCCCCCCCC
答え3
{ echo '>1'; tr -dc '[:alpha:]'; } <infile >outfile
ファイルの最初の行をインポートする必要はありません。echo
ヘッダーをインポートするだけです。アルファベット以外のすべての文字を削除すると、自動的に目的の結果が表示されます。