
Ich möchte zunächst unterscheiden, dassWiederholen des Befehls mit unterschiedlichen Dateinamenist nicht das, was ich frage.
Meine Frage ist, wie man einen einzelnen Befehl mit einem Verzeichnis von Dateinamen erstellt, denen jeweils der Teil --thingy des Befehls vorangestellt ist? In meiner spezifischen Anwendung verwende ich GATK (obwohl es in dieser Frage um das Erstellen des Befehlszeilenaufrufs geht) und noch genauerGenotypGVCFs. Mein Problem ist, dass der Befehl so aussehen sollte:
java -jar GenomeAnalysisTK.jar \
-T GenotypeGVCFs \
-R reference.fasta \
--variant sample1.g.vcf \
--variant sample2.g.vcf \
-o output.vcf
aber ich habe 93 Variantendateien, und daher --variant
muss die Zeile 93 Mal wiederholt werden, jedes Mal mit einem anderen Dateipfad. Sie befinden sich alle zusammen im selben Verzeichnis und haben alle dieselbe Erweiterung (*.g.vcf).
Ich habe mir überlegt, etwas damit zu machen, find -exec +
aber mir ist keine Möglichkeit eingefallen, das --variant
an jedes Ergebnis anzuhängen. xargs
scheint auch vielversprechend, aber ich verstehe nicht wirklich, was es macht, und hatte daher Probleme beim Einrichten. An diesem Punkt könnte ich den Befehl einfach von einem Python-Skript generieren lassen und ihn dann einfach in das Terminal einfügen, aber ich wollte wissen, ob es für die Zukunft eine „richtige“ Möglichkeit gibt, dies zu tun.
Antwort1
Theoretisch könnte das helfen, aber ich habe so etwas noch nie ausprobiert. An deiner Stelle würde ich es einfach echo
erst mit einem Befehl testen, bevor ich das java
Programm starte.
java -jar GenomeAnalysisTK.jar \
-T GenotypeGVCFs \
-R reference.fasta \
$(for v in *.g.vcf;do echo --variant ${v}" \\";done) -o output.vcf
Antwort2
Der Trick besteht darin, die gewünschte Liste zu erhalten und jedes Element zu bearbeiten. Wechseln Sie in das Verzeichnis mit Ihren Variantendateien und geben Sie etwas ein wie
FILES=$(ls | sed 's/^/--variant /')
echo ${FILES}
Ersetzen Sie dann einfach ${FILES} durch Ihren Befehl.
HTH.