2016-04-05 13 views
1

Ich habe *.vcf, *.vcf.vcfidx und *.vcf.idx Dateien im Verzeichnis /mypath/mydir/. Ich möchte Schleife über .vcf Dateien nur unter Befehl (für Datei 1):Bash Schleife über Dateien in verschiedenen Verzeichnissen und Druckausgabe

Befehl für eine VCF-Datei:

vcf-subset -c sample.txt vcffile1.vcf | bgzip -c > output_vcfile1.vcf_.vcf.gz 

Kann jemand bitte Schleife über alle VCF (nicht vcf.vcfidx oder vcf.idx) helfen Dateien und erhalten Sie die Ausgabe für jede Datei im angegebenen Verzeichnis /get/inthis/dir/ mit dem oben gezeigten Befehl?

Antwort

1

Verwenden Sie einfach glob Muster *.vcf:

for i in *.vcf; do echo "$i"; done 

Das glob Muster *.vcf wird in .vcf endet nur Dateien anzeigen lassen.

Ihr Befehl:

for i in *.vcf; do 
    vcf-subset -c sample.txt "$i" | bgzip -c > /get/inthis/dir/output_"$i"_.vcf.gz 
done 

Wenn Sie für .vcf Dateien in einem bestimmten Verzeichnis suchen z.B. /foo/bar/, do:

for i in /foo/bar/*.vcf; do 
    vcf-subset -c sample.txt "$i" | bgzip -c > /get/inthis/dir/output_"${i##*/}"_.vcf.gz 
done 
+0

Danke, aber wie erwähnen Sie, welches Verzeichnis nach vcf-Dateien suchen und welches Verzeichnis zum Drucken der Ausgabedatei verwenden? – MAPK

+0

@MAPK überprüfen Sie meine Bearbeitungen .. – heemayl

+0

Danke. Also gibt '$ i' hier jede '.vcf' Datei an? Es wird keine '.vcf.vcfidx' Dateien durchlaufen. Will nur diese geklärt bekommen .. – MAPK

Verwandte Themen