Procesamiento por lotes de dos conjuntos de archivos

Procesamiento por lotes de dos conjuntos de archivos

Supongamos que tengo dos conjuntos de archivos foo_A_uid.bary foo_B_uid.bar. Cada conjunto contiene un número (conocido) de archivos. Ahora, quiero procesar los pares correspondientes usando alguna herramienta ( ImageMagicken mi caso), es decir, quiero ejecutar some_command foo_A_i.bar foo_B_i.bar out_i.bar, ¿dónde out_i.barestá el resultado/salida al ejecutar la herramienta en el par foo_A_i.bary foo_B_i.barpara algunos fijos i?

Mi pregunta es ¿cómo puedo realizar este proceso por lotes? python¿ Algún bashguión?

Aclaración:Por conjunto de archivos me refiero a una lista de archivos, todos comienzan con la misma inicial, luego algún UID y tienen la misma extensión. Esto es válido tanto para los conjuntos de entrada como para la salida.

Respuesta1

Aquí tienes una posible solución, que funciona, aunque no sé si es buena.

#!/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

Ejecutarlo debería ser algo como:

script foo_A_ foo_B_ out_

Respuesta2

#!/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

Suponiendo que ambos archivos están ordenados, la línea de conteo obtiene el número de líneas en el archivo a. Luego, se ejecuta un bucle sobre todos los valores de 1...count. La variable de recuento contiene el nombre del archivo, que se corta con ${count/ */}. Con sed, obtienes la misma línea de ambos archivos. -n significa 'no imprimir de forma predeterminada', $line"p" simplemente imprimirá la línea $line.

información relacionada