다운로드는 다음 경로를 통해서 받을 수 있다.
가장 최근의 release에 접근할 수 있다.
다음과 같이 파일 리스트를 먼저 만든다. 박테리아의 경우 파일이 많기 때문에 약간 다른 명령을 이용한다.
lftp -c "open ftp.ensemblgenomes.org:/pub/current/bacteria/fasta && ls -Rl | grep dna | grep -v cdna && exit" > bacteria_files
wget -A "*.gz" -r --spider ftp://ftp.ensemblgenomes.org/pub/current/fungi/fasta/ > fungi_lists 2>&1
wget -A "*.gz" -r --spider ftp://ftp.ensemblgenomes.org/pub/current/protists/fasta/ > protists_lists 2>&1
그리고 박테리아 파일의 경우 다음과 같이 처리한다.
vi read_lines.py
parent = ""
with open("bacteria_files") as f:
for line in f:
line = line.strip()
if ":" == line[-1]:
parent = "ftp://ftp.ensemblgenomes.org/pub/current/bacteria/fasta/" + line[:-1][2:] + "/"
# print parent
else:
lines = line.split()
if ("dna" != lines[-1]) and ("dna.genome" in lines[-1]):
print parent+lines[-1]
:wq
python read_lines.py > download_bacteria
다음은 비슷한 일을 수행하는 bash script이다. 속도가 느리고, 추가적으로 grep으로 dna.genome을 포함하는 파일명만 선택해야 한다.
#!/bin/bash
parent=""
temp=""
while read line
do
if [[ "$line" =~ :$ ]]; then
temp=${line%%?}
temp=${temp:2}
parent=ftp://ftp.ensemblgenomes.org/pub/current/bacteria/fasta/$temp
else
a_path=`echo ${line} | awk -F " " {'print $9'}`
if [ ${a_path} != "dna" ]; then
echo ${parent}/${a_path}
fi
fi
done < bacteria_files
다음으로 필요에 따라서 파일 내용을 정리해 본다.
가령,
cat fungi_lists | grep -E "^--.*gz$" | grep dna.genome | awk -F " " {'print $3'} > download_fungi
또는
cat fungi_lists | grep -E "^--.*gz$" | grep -v dna_rm | grep -v dna_sm | grep -v cdna | grep -v ncrna | grep -v pep | grep -v cds | awk -F " " {'print $3'} > download_fungi
만약 genome만 다운로드 하려면 전자를, 다른 파일도 다운로드 하려면 후자를 이용한다.
다음은 나머지 파일이다.
cat protists_lists | grep -E "^--.*gz$" | grep dna.genome | awk -F " " {'print $3'} > download_protists
이제 병렬로 다운로드를 수행한다. 물론 다운로드를 시작하기 전에 따로 따로 폴더를 fungi, protists, bacteria로 나눠서 만들고 개별적인 폴더에서 아래의 다운로드 명령을 각각 실행하는 것이 좋다.
cat download_fungi | xargs -n 1 -P 8 wget -q
cat download_protists | xargs -n 1 -P 8 wget -q
댓글