
Supongamos que tengo dos conjuntos de archivos foo_A_uid.bar
y foo_B_uid.bar
. Cada conjunto contiene un número (conocido) de archivos. Ahora, quiero procesar los pares correspondientes usando alguna herramienta ( ImageMagick
en mi caso), es decir, quiero ejecutar some_command foo_A_i.bar foo_B_i.bar out_i.bar
, ¿dónde out_i.bar
está el resultado/salida al ejecutar la herramienta en el par foo_A_i.bar
y foo_B_i.bar
para algunos fijos i
?
Mi pregunta es ¿cómo puedo realizar este proceso por lotes? python
¿ Algún bash
guió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.