Stapelverarbeitung von zwei Dateisätzen

Stapelverarbeitung von zwei Dateisätzen

Angenommen, ich habe zwei Dateisätze foo_A_uid.barund foo_B_uid.bar. Jeder Satz enthält (eine bekannte) Anzahl von Dateien. Nun möchte ich die entsprechenden Paare mit einem Tool verarbeiten ( ImageMagickin meinem Fall), d. h. ich möchte ausführen some_command foo_A_i.bar foo_B_i.bar out_i.bar, wobei out_i.bardas Ergebnis/die Ausgabe beim Ausführen des Tools für das Paar foo_A_i.barund foo_B_i.barfür einige feste Werte ist i.

Meine Frage ist, wie ich diesen Vorgang stapelweise durchführen kann. Irgendein pythonSkript bash?

Klärung:Mit Dateisatz meine ich eine Liste von Dateien, die alle mit dem gleichen Anfangsbuchstaben beginnen, dann eine UID haben und die gleiche Erweiterung haben. Dies gilt sowohl für Eingabesätze als auch für die Ausgabe.

Antwort1

Hier ist eine mögliche Lösung, die funktioniert, obwohl ich nicht weiß, ob sie gut ist.

#!/bin/bash

EXPECTED_ARGS=3
E_BADARGS=65

if [ $# -ne $EXPECTED_ARGS ]
then
    echo Not the right number of arguments
    exit $E_BADARGS
fi

for i in $( ls $1* ); do
    TMP=$(echo $2$(echo $i | cut -d'_' -f2))
    TMP2=$(echo $3$(echo $i | cut -d'_' -f2))
    convert $i $TMP +append $TMP2
done

Die Ausführung sollte etwa so aussehen:

script foo_A_ foo_B_ out_

Antwort2

#!/bin/bash
count=$(wc -l foo_A_uid.bar)
for line in $(seq 1 ${count/ */})
do
    aline=$(sed -n $line"p" foo_A_uid.bar)
    bline=$(sed -n $line"p" foo_A_uid.bar)
    yourcommand "$aline" "$bline"
done

Vorausgesetzt, beide Dateien sind sortiert, liefert die count-Zeile die Anzahl der Zeilen in Datei a. Dann läuft eine Schleife über alle Werte von 1..count. Die count-Variable enthält den Namen der Datei, der mit abgeschnitten wird ${count/ */}. Mit sed erhält man aus beiden Dateien die gleiche Zeile. -n bedeutet 'standardmäßig kein Drucken', $line"p" druckt dann einfach die Zeile $line.

verwandte Informationen