2016-09-20 3 views
0

Ich habe einen Ordner mit einer Reihe von Dateien, die kombiniert werden müssen, und ich bin auf der Suche nach einem guten Befehl, um es zu tun. Die Dateien wie folgt aussehen:Verwenden Sie zcat zum Stapeln einer Liste von Dateien

Concatenate Together: 
A1_S1_L001_R1_001.fastq.gz 
A1_S1_L002_R1_001.fastq.gz 
A1_S1_L003_R1_001.fastq.gz 
A1_S1_L004_R1_001.fastq.gz 

Concatenate Together: 
A1_S1_L001_R2_001.fastq.gz 
A1_S1_L002_R2_001.fastq.gz 
A1_S1_L003_R2_001.fastq.gz 
A1_S1_L004_R2_001.fastq.gz 

Concatenate Together: 
B1_S1_L001_R1_001.fastq.gz 
B1_S1_L002_R1_001.fastq.gz 
B1_S1_L003_R1_001.fastq.gz 
B1_S1_L004_R1_001.fastq.gz 

Concatenate Together: 
B1_S1_L001_R2_001.fastq.gz 
B1_S1_L002_R2_001.fastq.gz 
B1_S1_L003_R2_001.fastq.gz 
B1_S1_L004_R2_001.fastq.gz 

etc. 

So ist das Muster, das für Hunderte von Dateien die ersten Buchstaben und Zahlen (A1 oder B1 hier) auf eine Gruppe bezieht, die in es zwei Untergruppen (R1 und R2) enthält. Die Hauptgruppen sind A1-H1, A2-H2 und A3-H3. Innerhalb jeder Untergruppe gibt es vier Dateien (L001, L002, L003, L004).

Gibt es eine gute Möglichkeit, diese einfach mit zcat (oder wirklich anders) zu kombinieren?

Antwort

2

So etwas sollte es tun:

cd "/path/to/the/directory" || exit 1 
for num in {1..3}; do 
    for letter in {A..H}; do 
     for subgroup in R1 R2; do 
      zcat "$letter$num"_S1_L*_"$subgroup"_001.fastq.gz > "$letter$num-$subgroup" 
     done 
    done 
done 

Sie haben den Namen (und möglicherweise Pfad) der Ausgabedateien anzupassen. Ich benutzte "$letter$num-$subgroup", also z.B. B1-R1.

+0

Perfekt, danke. –

Verwandte Themen