2016-06-13 5 views
1

Ich habe 100s von Dateien in Paaren mit ähnlichen Namen Muster: was bedeutet, ihre Dateinamen sind "A0-B1.fastq.0.1.82.fastq" & "A0-B2 .fastq.0.1.82.fastq ", wobei B0 und B1 zwei verschiedene Paare angeben. "82" in den Dateinamen steht für Zufallszahl. Das Verzeichnis hat Dateien mit einer Zufallszahl von 82 bis 100. Somit gibt es für jede Zufallszahl zwei Paar Dateien (A0-B1 und A0-B2). Ich möchte beide Paare für jede Zufallszahl zusammenführen.iterieren durch Dateinamen und zusammenführen nach Muster, BASH

Hier ist, was ich versucht:

INPUT=`ls A0-*.0.1.*.fastq` 

#set values for pair and random 
p=`seq 1 1 2` 
r=`seq 82 2 100` 

for r in $INPUT; 
do 
cat A0-${p}.fastq.0.1.${r}.fastq > A0.merged.${r}.fastq 
done 

Was bin ich die richtige Ausgabe zu erhalten ??

Antwort

0

Sie dieses Skript verwenden können -

for i in {82..100..2} 
do 
    if ls A0-*.fastq.0.1.${i}.fastq 1> /dev/null 2>&1; then 
     cat A0-*.fastq.0.1.${i}.fastq > A0.merged.${i}.fastq 
    fi 
done 
+0

@anishsane Außer ein glob ist, wobei in diesem Fall 'Test -f' wenn mehrfach Weg scheitern könnte Namen werden erweitert. Versuchen Sie 'test -f *' – andlrc

+0

OK ... tatsächlich, OPs Skript betrachtend, dachte ich OP hat Dateinamen mit $ p festgelegt, die Werte 1 u. 2 nehmen. So glob würde nicht benötigt werden. Aber du hast Recht, '-f' wird fehlschlagen, wenn es für glob verwendet wird. – anishsane

+0

Danke für die Hilfe. es hat perfekt funktioniert. – RonnB

2

Dies sollte für Sie arbeiten:

for r in {82..100}; do 
    if [[ -f A0-B1.fastq.0.1.${r}.fastq ]] && [[ -f A0-B2.fastq.0.1.${r}.fastq ]]; then 
    cat A0-B1.fastq.O.1.${r}.fastq A0-B2.fastq.O.1.${r}.fastq > A0.merged.${r}.fastq 
    fi 
done 
Verwandte Themen