2014-02-05 45 views
0

我做的這些文件的測試:讓不同的輸出文件

comp900_c0_seq1_Glicose_1_ACTTGA_merge_R1_001.fastq 
comp900_c0_seq1_Glicose_1_ACTTGA_merge_R2_001.fastq 
comp900_c0_seq2_Glicose_1_ACTTGA_merge_R1_001.fastq 
comp900_c0_seq2_Glicose_1_ACTTGA_merge_R2_001.fastq 
comp995_c0_seq1_Glicose_1_ACTTGA_merge_R2_001.fastq 
comp995_c0_seq1_Xilano_1_AGTCAA_merge_R1_001.fastq 
comp995_c0_seq1_Xilano_1_AGTCAA_merge_R2_001.fastq 

我想有相同的代碼,直到第一個_(下劃線)的文件,並讓代碼R1在不同的輸出文件。應該根據代碼調用輸出文件,直到第一個_(下劃線)。

- 這是我的代碼,但我在製作輸出文件時遇到了麻煩。

#!/bin/bash 

for i in {900..995}; do 
    if [[ ${i} -eq ${i} ]]; then 
     cat comp${i}_*_R1_001.fastq 
    fi 
done 

- 我想有兩個輸出:

一個輸出將有來自行:

comp900_c0_seq1_Glicose_1_ACTTGA_merge_R1_001.fastq 
comp900_c0_seq2_Glicose_1_ACTTGA_merge_R1_001.fastq 

和它的名字應該是comp900_R1.out

其他輸出將具有線來自:

comp995_c0_seq1_Xilano_1_AGTCAA_merge_R1_001.fastq 

和它的名字應該是comp995_R1.out

最後,正如我所說的,這是一個小測試。我希望我的腳本能夠處理大量具有相同特徵的文件。

+0

出於好奇:爲什麼你需要這個條件:'if [[$ {i} -eq $ {i}]]; then'? – devnull

+0

此外,似乎你需要的是'comp $ {i}' – devnull

+0

你對這個問題的期望是什麼? – anubhava

回答

1

使用awk

ls -1 *.fastq | awk -F_ '$8 == "R1" {system("cat " $0 ">>" $1 "_R1.out")}' 

列表中的所有文件*.fastqawk,在_分裂。檢查第8部分$8是否爲R1,然後將cat >>該文件附加到第一部分$1 + _R1.out,這將是comp900_R1.outcomp995_R1.out。假定沒有文件名包含空格或其他特殊字符。含

文件comp900_R1.out所有線路從

comp900_c0_seq1_Glicose_1_ACTTGA_merge_R1_001.fastq 
comp900_c0_seq2_Glicose_1_ACTTGA_merge_R1_001.fastq 

,並在一個通用的解決方案,從

comp995_c0_seq1_Xilano_1_AGTCAA_merge_R1_001.fastq 
1

我的刺文件comp995_R1.out包含所有行:

結果

#!/bin/bash 

for f in *_R1_*; do 
    code=$(echo $f | cut -d _ -f 1) 
    cat $f >> ${code}_c0_seq1_Glicose_1_ACTTGA_merge_R1_001.fastq 
done 

迭代其中包含_R1_的文件,然後將其輸出附加到基於code的文件中。

cut通過分割文件名(-d _)並返回第一個字段(-f 1)來提取代碼。

相關問題