1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        有了這些,文件批量重命名還需要求助其它工具嗎?

        共 4967字,需瀏覽 10分鐘

         ·

        2020-09-26 12:00

        經(jīng)驗(yàn)整理

        NGS系列文章包括NGS基礎(chǔ)、轉(zhuǎn)錄組分析?Nature重磅綜述|關(guān)于RNA-seq你想知道的全在這、ChIP-seq分析?ChIP-seq基本分析流程、單細(xì)胞測(cè)序分析?(重磅綜述:三萬字長(zhǎng)文讀懂單細(xì)胞RNA測(cè)序分析的最佳實(shí)踐教程 (原理、代碼和評(píng)述))、DNA甲基化分析、重測(cè)序分析、GEO數(shù)據(jù)挖掘典型醫(yī)學(xué)設(shè)計(jì)實(shí)驗(yàn)GEO數(shù)據(jù)分析 (step-by-step) - Limma差異分析、火山圖、功能富集等內(nèi)容。

        簡(jiǎn)單重命名

        Linux下文件重命名可以通過兩個(gè)命令完成收藏| 15 個(gè)你非了解不可的 Linux 特殊字符,媽媽再也不用擔(dān)心我看不懂這些符號(hào)了!,mvrename。

        • mv: 直接運(yùn)行可以進(jìn)行單個(gè)文件的重命名,如 mv old_name.txt new_name.txt

        • rename: 默認(rèn)支持單個(gè)文件或有固定規(guī)律的一組文件的批量重命名,示例如下。

        rename演示

        使用touch新建文件Linux - 文件操作,兩個(gè)樣品(分別是易生信a,易生信b),各自雙端測(cè)序得到的FASTQ文件Linux - 文件排序和FASTA文件操作

        ysx@ehbio:~/test$ touch YSX_a_1.fq.gz YSX_a_2.fq.gz YSX_b_2.fq.gz YSX_b_1.fq.gz
        ysx@ehbio:~/test$ ls
        YSX_a_1.fq.gz YSX_a_2.fq.gz YSX_b_1.fq.gz YSX_b_2.fq.gz

        把文件名中的易生信(YSX)改為易漢博 (ehbio):

        # rename '被替換文字' '要替換成的文字' 操作對(duì)象
        ysx@ehbio:~/test$ rename 'YSX' 'ehbio' *.gz
        ysx@ehbio:~/test$ ls
        ehbio_a_1.fq.gz ehbio_a_2.fq.gz ehbio_b_1.fq.gz ehbio_b_2.fq.gz

        不同操作系統(tǒng),rename的使用方法略有不同。印象中:

        # 在CentOS下,該命令未起作用
        ysx@ehbio:~/test$ rename 's/ehbio_//' *
        ysx@ehbio:~/test$ ls
        ehbio_a_1.fq.gz ehbio_a_2.fq.gz ehbio_b_1.fq.gz ehbio_b_2.fq.gz

        # 如果寫的rename命令沒發(fā)揮作用,使用man rename查看其具體使用方法, 個(gè)人經(jīng)驗(yàn),無外乎上面提到的兩種用法。
        ysx@ehbio:~/test$ man rename

        # NAME
        # rename - rename files
        #
        # SYNOPSIS
        # rename [options] expression replacement file...

        替換后綴:

        # 替換后綴
        ysx@ehbio:~/test$ rename 'fq' 'fastq' *.gz
        ysx@ehbio:~/test$ ls
        ehbio_a_1.fastq.gz ehbio_a_2.fastq.gz ehbio_b_1.fastq.gz ehbio_b_2.fastq.gz

        復(fù)雜重命名

        但有時(shí),需要重命名的文件不像上面那樣有很清晰的模式,直接可以替換,需要多幾步處理獲得對(duì)應(yīng)關(guān)系。

        假如已經(jīng)有對(duì)應(yīng)關(guān)系

        如下name.map.txt是自己手動(dòng)編寫的文件Linux - 文件內(nèi)容操作,a對(duì)應(yīng)Control, b對(duì)應(yīng)Treatment。

        ysx@ehbio:~/test$ ls
        name.map.txt ehbio_a_1.fastq.gz ehbio_a_2.fastq.gz ehbio_b_1.fastq.gz ehbio_b_2.fastq.gz

        ysx@ehbio:~/test$ cat name.map.txt
        a Control
        b Treatment

        組合文件名,使用mv重命名

        首先組合出原名字和最終名字Linux - 常用和不太常用的實(shí)用awk命令

        ysx@ehbio:~/test$ awk '{print "ehbio_"$1"_1.fastq.gz", "ehbio_"$2"_1.fastq.gz", "ehbio_"$1"_2.fastq.gz",  "ehbio_"$2"_2.fastq.gz"}' name.map.txt
        ehbio_a_1.fastq.gz ehbio_Control_1.fastq.gz ehbio_a_2.fastq.gz ehbio_Control_2.fastq.gz
        ehbio_b_1.fastq.gz ehbio_Treatment_1.fastq.gz ehbio_b_2.fastq.gz ehbio_Treatment_2.fastq.gz

        加上mv

        ysx@ehbio:~/test$ awk '{print "mv ehbio_"$1"_1.fastq.gz ehbio_"$2"_1.fastq.gz"; print "mv ehbio_"$1"_2.fastq.gz ehbio_"$2"_2.fastq.gz";}' name.map.txt
        mv ehbio_a_1.fastq.gz ehbio_Control_1.fastq.gz
        mv ehbio_a_2.fastq.gz ehbio_Control_2.fastq.gz
        mv ehbio_b_1.fastq.gz ehbio_Treatment_1.fastq.gz
        mv ehbio_b_2.fastq.gz ehbio_Treatment_2.fastq.gz

        可以直接拷貝上面的輸出再粘貼運(yùn)行,或存儲(chǔ)為文件運(yùn)行:

        ysx@ehbio:~/test$ awk '{print "mv ehbio_"$1"_1.fastq.gz ehbio_"$2"_1.fastq.gz"; print "mv ehbio_"$1"_2.fastq.gz ehbio_"$2"_2.fastq.gz";}' name.map.txt >rename.sh
        ysx@ehbio:~/test$ #bash rename.sh

        也可以把print改為system直接運(yùn)行:

        ysx@ehbio:~/test$ ls
        ehbio_a_1.fastq.gz ehbio_a_2.fastq.gz ehbio_b_1.fastq.gz ehbio_b_2.fastq.gz name.map.txt rename.sh
        ysx@ehbio:~/test$ awk '{system("mv ehbio_"$1"_1.fastq.gz ehbio_"$2"_1.fastq.gz"); system("mv ehbio_"$1"_2.fastq.gz ehbio_"$2"_2.fastq.gz");}' name.map.txt
        ysx@ehbio:~/test$ ls
        ehbio_Control_1.fastq.gz ehbio_Control_2.fastq.gz ehbio_Treatment_1.fastq.gz ehbio_Treatment_2.fastq.gz name.map.txt rename.sh

        使用rename會(huì)不會(huì)稍微簡(jiǎn)單一點(diǎn)?

        一定注意符號(hào)匹配和避免誤匹配(Linux - 常見錯(cuò)誤和快捷操作)。

        # 注意引號(hào)和空格
        ysx@ehbio:~/test$ awk '{print("rename "$1" "$2" *.fastq.gz"); }' name.map.txt
        rename a Control *.fastq.gz
        rename b Treatment *.fastq.gz

        # 上面的命令有什么問題嗎?
        # fastq中也存在a,是否也會(huì)被替換
        # ehbio中也存在b,是否也會(huì)倍替換

        ysx@ehbio:~/test$ awk '{system("rename "$1" "$2" *.fastq.gz"); }' name.map.txt

        # 執(zhí)行后,文件名都亂套了
        ysx@ehbio:~/test$ ls
        ehbio_b_1.fControlstq.gz ehbio_b_2.fControlstq.gz ehTreatmentio_Control_1.fastq.gz ehTreatmentio_Control_2.fastq.gz name.map.txt rename.sh

        # 再重命名回去,再次嘗試
        ysx@ehbio:~/test$ rename 'Control' 'a' *
        ysx@ehbio:~/test$ rename 'Treatment' 'b' *
        ysx@ehbio:~/test$ ls
        ehbio_a_1.fastq.gz ehbio_a_2.fastq.gz ehbio_b_1.fastq.gz ehbio_b_2.fastq.gz name.map.txt rename.sh

        # 重命名兩側(cè)加下劃線, 這也是我們做匹配時(shí)常需要注意的,盡量限制讓匹配更準(zhǔn)確
        ysx@ehbio:~/test$ awk '{system("rename _"$1"_ _"$2"_ *.fastq.gz"); }' name.map.txt

        # 打印出來看下
        ysx@ehbio:~/test$ awk '{print("rename _"$1"_ _"$2"_ *.fastq.gz"); }' name.map.txt
        # rename _a_ _Control_ *.fastq.gz
        # rename _b_ _Treatment_ *.fastq.gz

        # 這次沒問題了
        ysx@ehbio:~/test$ ls
        ehbio_Control_1.fastq.gz ehbio_Control_2.fastq.gz ehbio_Treatment_1.fastq.gz ehbio_Treatment_2.fastq.gz name.map.txt rename.sh

        從原文件名獲取對(duì)應(yīng)關(guān)系

        基于paste

        像上面自己寫好對(duì)應(yīng)文件是一個(gè)方法,有時(shí)也可以從文件名推測(cè)規(guī)律,生成對(duì)應(yīng)文件。

        如下有一堆測(cè)序原始數(shù)據(jù)NGS基礎(chǔ) - 高通量測(cè)序原理,選擇A組樣品來查看:

        # 如下有一堆測(cè)序原始數(shù)據(jù),選擇A組樣品來查看
        ysx@ehbio:~/test2# ls A*

        A1_FRAS192317015-1a_1.fq.gz A2_FRAS192320421-1a_1.fq.gz A3_FRAS192317017-1a_1.fq.gz
        A1_FRAS192317015-1a_2.fq.gz A2_FRAS192320421-1a_2.fq.gz A3_FRAS192317017-1a_2.fq.gz

        中間的那一串字符FRA...-是我們不需要的。

        觀察規(guī)律,先按下劃線將文件名分割(_),再獲取第1,3個(gè)元素;另外習(xí)慣性給生物重復(fù)前面也加上下劃線(用到了sed的記憶匹配)Linux - SED操作,awk的姊妹篇。

        ysx@ehbio:~/test2# ls A*.gz | cut -f 1,3 -d '_' | sed 's/\([A-E]\)/\1_/'
        A_1_1.fq.gz
        A_1_2.fq.gz
        A_2_1.fq.gz
        A_2_2.fq.gz

        把原樣品名字與新樣品名字對(duì)應(yīng)起來,這里用到了paste和輸入重定向 (<)Linux - 管道、標(biāo)準(zhǔn)輸入輸出:

        ysx@ehbio:~/test2# paste <(ls A*.gz) <(ls A*.gz | cut -f 1,3 -d '_' | sed 's/\([A-E]\)/\1_/')
        A1_FRAS192317015-1a_1.fq.gz A_1_1_fq.gz
        A1_FRAS192317015-1a_2.fq.gz A_1_2_fq.gz
        A2_FRAS192320421-1a_1.fq.gz A_2_1_fq.gz
        A2_FRAS192320421-1a_2.fq.gz A_2_2_fq.gz
        A3_FRAS192317017-1a_1.fq.gz A_3_1_fq.gz
        A3_FRAS192317017-1a_2.fq.gz A_3_2_fq.gz

        使用mv直接重命名 (還可以把這個(gè)腳本保存下來,保留原始名字和新名字的對(duì)應(yīng)關(guān)系,萬一操作錯(cuò)了,在看到結(jié)果異常時(shí)也可以方便回溯)Bash概論 - Linux系列教程補(bǔ)充篇

        ysx@ehbio:~/test2# paste <(ls A*.gz) <(ls A*.gz | cut -f 1,3 -d '_' | sed 's/\([A-E]\)/\1_/') | sed 's#^#/bin/mv #'
        /bin/mv A1_FRAS192317015-1a_1.fq.gz A_1_1_fq.gz
        /bin/mv A1_FRAS192317015-1a_2.fq.gz A_1_2_fq.gz
        /bin/mv A2_FRAS192320421-1a_1.fq.gz A_2_1_fq.gz
        /bin/mv A2_FRAS192320421-1a_2.fq.gz A_2_2_fq.gz
        /bin/mv A3_FRAS192317017-1a_1.fq.gz A_3_1_fq.gz
        /bin/mv A3_FRAS192317017-1a_2.fq.gz A_3_2_fq.gz

        軟鏈接也是常用的 (但一定注意源文件使用全路徑)Linux - 原來你是這樣的軟連接

        ysx@ehbio:~/test2# paste <(ls *.gz) <(ls *.gz | sed 's/\./_/' | cut -f 1,3,4 -d '_' | sed 's/\([A-E]\)/analysis\/\1_/') | sed 's#^#ln -s `pwd`/#'
        ln -s `pwd`/A1_FRAS192317015-1a_1.fq.gz analysis/A_1_1_fq.gz
        ln -s `pwd`/A1_FRAS192317015-1a_2.fq.gz analysis/A_1_2_fq.gz
        ln -s `pwd`/A2_FRAS192320421-1a_1.fq.gz analysis/A_2_1_fq.gz
        .
        .
        .
        ln -s `pwd`/E15_FRAS192317028-1a_1.fq.gz analysis/E_15_1_fq.gz
        ln -s `pwd`/E15_FRAS192317028-1a_2.fq.gz analysis/E_15_2_fq.gz

        基于awk

        轉(zhuǎn)換下輸入數(shù)據(jù)的格式,字符處理在awk也可以操作Linux - 常用和不太常用的實(shí)用awk命令,但我更習(xí)慣使用命令組合,每一步都用最簡(jiǎn)單的操作,不容易出錯(cuò)。

        ysx@ehbio:~/test2# ls A*.gz | sed -e 's/\([A-E]\)/\1_/'
        A_1_FRAS192317015-1a_1.fq.gz
        A_1_FRAS192317015-1a_2.fq.gz
        A_2_FRAS192320421-1a_1.fq.gz
        A_2_FRAS192320421-1a_2.fq.gz
        A_3_FRAS192317017-1a_1.fq.gz
        A_3_FRAS192317017-1a_2.fq.gz
        ysx@ehbio:~/test2# ls A*.gz | sed -e 's/\([A-E]\)/\1_/' -e 's/\./_./'
        A_1_FRAS192317015-1a_1_.fq.gz
        A_1_FRAS192317015-1a_2_.fq.gz
        A_2_FRAS192320421-1a_1_.fq.gz
        A_2_FRAS192320421-1a_2_.fq.gz
        A_3_FRAS192317017-1a_1_.fq.gz
        A_3_FRAS192317017-1a_2_.fq.gz

        采用awk生成對(duì)應(yīng)關(guān)系:

        # 生成樣品重復(fù),計(jì)數(shù)出錯(cuò)了,每行記了一個(gè)數(shù),而實(shí)際兩行是一個(gè)樣本。
        ysx@ehbio:~/test2# ls A*.gz | sed -e 's/\([A-E]\)/\1_/' -e 's/\./_./' | awk 'BEGIN{OFS=" ";FS="_"}{sum[$1]+=1; print $0, $1"_"sum[$1]"_"$4$5;}'
        A_1_FRAS192317015-1a_1_.fq.gz A_1_1.fq.gz
        A_1_FRAS192317015-1a_2_.fq.gz A_2_2.fq.gz
        A_2_FRAS192320421-1a_1_.fq.gz A_3_1.fq.gz
        A_2_FRAS192320421-1a_2_.fq.gz A_4_2.fq.gz
        A_3_FRAS192317017-1a_1_.fq.gz A_5_1.fq.gz
        A_3_FRAS192317017-1a_2_.fq.gz A_6_2.fq.gz
        # 稍微改進(jìn)下
        ysx@ehbio:~/test2# ls A*.gz | sed -e 's/\([A-E]\)/\1_/' -e 's/\./_./' | awk 'BEGIN{OFS=" ";FS="_"}{sum[$1]+=1; print $0, $1"_"sum[$1]"_"$4$5;}'
        A_1_FRAS192317015-1a_1.fq.gz A_1_1.fq.gz
        A_1_FRAS192317015-1a_2.fq.gz A_2_2.fq.gz
        A_2_FRAS192320421-1a_1.fq.gz A_3_1.fq.gz
        A_2_FRAS192320421-1a_2.fq.gz A_4_2.fq.gz
        A_3_FRAS192317017-1a_1.fq.gz A_5_1.fq.gz
        A_3_FRAS192317017-1a_2.fq.gz A_6_2.fq.gz

        # 記得源文件名字的替換
        ysx@ehbio:~/test2# ls A*.gz | sed -e 's/\([A-E]\)/\1_/' -e 's/\./_./' | awk 'BEGIN{OFS=" ";FS="_"}{sum[$1]+=1; print $0, $1"_"sum[$1]"_"$4$5;}' | sed -e 's/_//' -e 's/_\././' -e 's#^#ln -s `pwd`/#' |head
        ln -s `pwd`/A1_FRAS192317015-1a_1.fq.gz A_1_1.fq.gz
        ln -s `pwd`/A1_FRAS192317015-1a_2.fq.gz A_2_2.fq.gz

        好了,重命名就到這了。有了這個(gè)思路,關(guān)鍵是如何根據(jù)自己的文件名字特征,構(gòu)造對(duì)應(yīng)的匹配關(guān)系。

        另外,Window下使用Git for windows應(yīng)該也可以實(shí)現(xiàn)對(duì)應(yīng)的操作Windows輕松實(shí)現(xiàn)linux shell環(huán)境:gitforwindows

        你可能還想看

        往期精品(點(diǎn)擊圖片直達(dá)文字對(duì)應(yīng)教程)


        后臺(tái)回復(fù)“生信寶典福利第一波”或點(diǎn)擊閱讀原文獲取教程合集


        瀏覽 16
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            一二级国产色情 | 国产一级无码Av片在线观看 | 国产黄色在线观看网站 | 国产又大又粗又猛的视频 | www4hu亚洲精品 | 爱爱呻吟声 | 日韩国产专区 | 性生活片免费看 | 欧美黑吊大战白妞欧美大片 | 黄色一级片黄色一级片 |