In einer einfachen Verarbeitung von Dateien nicht im i-ten Element der Schleife sind, wo Sie etwas für jede Datei in einem Verzeichnis tun wollen, tun Sie etwas wie folgt aus:Bash die Dateinamen übergeben, die
for i in file1 file2 file3 file5
do
echo "Processing $i"
done
Was ich hier machen möchte, ist, dass ich sowohl $ i als auch die Nicht-$ i-Dateien als Argument für einen Befehl übergebe. Sagen wir, mein Verzeichnis enthält 4 Dateien (Datei1, Datei2, Datei3, Datei5). Zum Beispiel möchte ich in der ersten Iteration der Schleife, wenn Datei1 verarbeitet wird, den Rest der Dateien (Datei2, Datei3, Datei5) an das Argument -b des Befehls übergeben.
Zum Beispiel erste Iteration der Schleife in bash sollte wie folgt aussehen:
FILES=/path/to/directory
for i in $FILES
do
bedtools intersect -a $i -b file2 file3 file5
done
In zweiten Iteration wie die Datei2 in dem $ i der Rest der Dateien wird übergeben werden -b
Argument.
for i in $FILES
do
bedtools intersect -a $i -b file1 file3 file5
done
und so weiter für alle Dateien im Verzeichnis. Kurz gesagt, übergeben Sie die aktuelle Datei an -a
Argument und Rest der Dateien zu -b
Argument.
Es wird toll wenn mir jemand dabei helfen kann. Vielen Dank.
Vielen Dank für die Antwort, ich glaube, es nicht die richtig $ anderen Dateinamen ist vorbei. Ich bekomme einen Fehler dafür. Ich habe es manuell versucht und es funktioniert, wenn ich es folgendermaßen mache: 'bedtools schneiden sich -a file1.txt -b file2.txt file3.txt .. fileN.txt> output.txt'. Können Sie bitte eine Echozeile hinzufügen, damit ich sehen kann, was ich an diese Argumente übergebe? Vielen Dank. – Newbie
Die $ others-Dateinamen sollten durch ein Leerzeichen getrennt sein. – Newbie
Wenn Sie 'set -x' zum Skript hinzufügen, können Sie die Befehle sehen, die ausgeführt werden. –