shell腳本練習:ascp從ENA批量下載數據腳本

引言

我們往往需要從ENA下載測序數據巩螃,數據量過大時實用ascp 無疑是最佳選擇。

ENA下載的包含數據鏈接的TSV格式文本到下載大诸,每次都這么折騰捅厂,過于浪費時間。

這里资柔,我寫了個shell腳本焙贷,提取TSV格式文本 內的數據鏈接并用ascp下載,不過這個腳本只能用于linux平臺(你在win上安裝git-bash 和cmder也不行)贿堰。

友情提醒:ascp占用網絡資源過多盈厘,如果是租的服務器,最好先咨詢下服務器是否允許使用官边。

腳本使用

輸入文件:filereport_read_run_*_tsv.txt 為從ENA下載的TSV格式的沸手,包含所有Run鏈接的文本。如何下載該文件不是本文重點注簿,可以自行搜索契吉。

WeChat后臺回復ascp下載 可以下載到我測試用的輸入文件與該文腳本(7天有效期)。

提醒:測試用的輸入文件內有300+下載鏈接诡渴,大家測試時注意截取一部分來測試捐晶。

#使用方法
$ bash ascp_ENA.sh <filereport_read_run_*_tsv.txt> <output_path>

腳本信息注釋

  • input

    更改全局參數設置,一般不用改妄辩。其中的treads惑灵,指的是download 部分一次性下載文件個數。

  • check parameters

    如果參數個數不是2眼耀,打印使用信息

  • check the ascp

    檢查是否已經安裝Aspera-connect 英支。

    如果ascp沒有安裝,則會提示安裝信息(如下)哮伟,這里只是寫了目前的最新版本干花,大家安裝時靈活選擇。

wget -c https://d3gcli72yxqn2z.cloudfront.net/connect_latest/v4/bin/ibm-aspera-connect_4.1.1.73_linux.tar.gz
tar -zxvf ibm-aspera-connect_4.1.1.73_linux.tar.gz
sh ibm-aspera-connect_4.1.1.73_linux.sh
echo "PATH=$PATH:$HOME/.aspera/connect/bin/" >> $HOME/.bashrc
source $HOME/.bashrc

  • check the input file

檢查輸入文件是否存在且可讀楞黄。否池凄,則打印幫助命令并跳出。

  • check the output dirctory

檢查輸出文件夾是否存在鬼廓。否肿仑,則打印幫助命令并跳出。

  • download

檢查提取輸入文件鏈接內容,并下載尤慰。同時下載文件數為threads 值勾邦,此處為5。

腳本特點

  • 因輸入造成的錯誤都不會繼續(xù)往下執(zhí)行割择,會及時跳出整個腳本眷篇,因為不太懂exit返回值,這里我都寫作返回1了荔泳。
  • 輸入文件為從ENA下載的TSV格式文件蕉饼,只需要包含ENA的下載鏈接即可。按ftp.*gz 提取的鏈接部分玛歌。
  • 每次同時下載5個文件昧港,你也可以修改腳本呢開頭 threads=5賦值部分。這個多線程有些限制支子,大家可以看下參考 部分创肥,其中有更好的多進行并發(fā)寫法,但是我看不懂值朋。
  • 腳本內已經盡量給出了報錯信息叹侄,方便定位報錯位置。

腳本限制

  • 沒有檢查ascp密鑰文件位置昨登,懶得寫了趾代。如果你用conda安裝的,密鑰文件可能不是這個路徑丰辣。
  • 不能使用不同平臺撒强。
  • 沒有設置默認值,不如perl賦值那么方便笙什。具體為什么不能用邏輯“或”|| 在shell腳本中賦值飘哨,大家可以自行查下shell變量賦值特點。

腳本內容

#!/usr/bin/env bash
#Name: ascp_ENA.sh
#NOTE: You can only run this script on the linux system with bash 
#Usage: bash $0  <filereport_read_run_*_tsv.txt>  <output_path>

## input
input_file=$1
output_path=$2
threads=5

usage="Usage:\nbash $0  <filereport_read_run_*_tsv.txt>  <output_path>"

## check parameters
if [ $# != 2 ];then
    echo -e $usage
    exit 1
fi

## check the ascp
###NOTE: ascp must be install && add it to the envionment variable
ascp_install='\nThe ascp command must be installed locally and add environment variables!\n\nwget -c https://d3gcli72yxqn2z.cloudfront.net/connect_latest/v4/bin/ibm-aspera-connect_4.1.1.73_linux.tar.gz\ntar -zxvf ibm-aspera-connect_4.1.1.73_linux.tar.gz\nsh ibm-aspera-connect_4.1.1.73_linux.sh\necho "PATH=$PATH:$HOME/.aspera/connect/bin/" >> $HOME/.bashrc\nsource $HOME/.bashrc\n'
ascp -h > /dev/null
if [ $? == 0 ];then
    echo "Command ascp is ready !"
else
    echo -e ${ascp_install}
    exit 1
fi

## check the input file
if [ -r $1 ];then
    echo "Input file $1 is ready!"
else
    echo "ERROR: check the input file $1 !"
    echo -e $usage
    exit 1
fi

## check the output dirctory
if [ -d $2  ];then
    echo "Output dirctory $2 is ready !"
else 
    echo "ERROR: check the output dirctory $2 !"
    echo -e $usage
    exit 1
fi

## download
sleep 1
echo "Trying to download fastq files......"

lims=0
grep -o 'ftp.*gz' ${input_file} |sed -e 's/;/\n/g' -e 's/ftp.sra.ebi.ac.uk//g' | while read fq_ftp 
do
    all=$(echo ${fq_ftp} |wc -l)
    if [ $all == 0  ];then
        echo "The $1 don't have effective ftp address. Please check it!"
    fi
    ((lims++)) 
    ascp -QT -l 300m -P33001 -i ${HOME}/.aspera/connect/etc/asperaweb_id_dsa.openssh era-fasp@fasp.sra.ebi.ac.uk:${fq_ftp}   ${output_path} &  #這里必須放入后臺琐凭,不然多線程就是空談芽隆。
    #Example: ascp -QT -l 300m -P33001 -i ~/.aspera/connect/etc/asperaweb_id_dsa.openssh era-fasp@fasp.sra.ebi.ac.uk:/vol1/fastq/SRR949/SRR949627/SRR949627_1.fastq.gz ./

    if [ ${lims} -ge ${threads} ];then  #-ge 大于等于
        wait  # wait不加PID就是等待所有子進程全部結束才繼續(xù)。
        lims=0  #重置限制,繼續(xù)循環(huán)上面的命令
    fi
done

#bash ascp_for_ENA.sh  <filereport_read_run_*_tsv.txt>  <output path>  

參考

微信推文:氣象編程 | shell多進程并發(fā)&進程數控制

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末淘正,一起剝皮案震驚了整個濱河市摆马,隨后出現的幾起案子,更是在濱河造成了極大的恐慌鸿吆,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件述呐,死亡現場離奇詭異惩淳,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門思犁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來代虾,“玉大人,你說我怎么就攤上這事激蹲∶弈ィ” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵学辱,是天一觀的道長乘瓤。 經常有香客問我,道長策泣,這世上最難降的妖魔是什么衙傀? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮萨咕,結果婚禮上统抬,老公的妹妹穿的比我還像新娘。我一直安慰自己危队,他們只是感情好聪建,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著茫陆,像睡著了一般妆偏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上盅弛,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天钱骂,我揣著相機與錄音,去河邊找鬼挪鹏。 笑死见秽,一個胖子當著我的面吹牛,可吹牛的內容都是我干的讨盒。 我是一名探鬼主播解取,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼返顺!你這毒婦竟也來了禀苦?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤遂鹊,失蹤者是張志新(化名)和其女友劉穎振乏,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體秉扑,經...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡慧邮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片误澳。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡耻矮,死狀恐怖,靈堂內的尸體忽然破棺而出忆谓,到底是詐尸還是另有隱情裆装,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布倡缠,位于F島的核電站哨免,受9級特大地震影響,放射性物質發(fā)生泄漏毡琉。R本人自食惡果不足惜铁瞒,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望桅滋。 院中可真熱鬧慧耍,春花似錦、人聲如沸丐谋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽号俐。三九已至泌豆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間吏饿,已是汗流浹背踪危。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留猪落,地道東北人贞远。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像笨忌,于是被迫代替她去往敵國和親蓝仲。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內容