이것을 결합하는 방법을 제안해 주실 수 있나요?
a.fasta에는 헤더 1, 2, 3, ....을 포함하는 10000개의 시퀀스가 있습니다. 10000 ............. 헤더 헤더가 하나만 포함되어 있습니다. 예를 들어
>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
그러나 이러한 파일을 사용하려면 이 두 스크립트를 $PATH( $HOME/bin
예:)의 파일에 저장하고 실행 가능하게 만드는 것이 좋습니다( chmod a+x $HOME/bin/scriptname
).
Tbl을 빠르게 변환하세요
이 스크립트는 fasta 파일을 가져와서 tbl 형식으로 변경합니다(fasta 헤더, 탭 및 시퀀스가 모두 한 줄에 있음).
#! /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 파일( >
제목 및 줄당 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
헤더만 가져오면 됩니다. 알파벳 문자를 제외한 모든 문자를 제거하면 자동으로 원하는 결과가 나옵니다.