Processamento em lote de dois conjuntos de arquivos

Processamento em lote de dois conjuntos de arquivos

Suponha que eu tenha dois conjuntos de arquivos foo_A_uid.bare foo_B_uid.bar. Cada conjunto contém (um número conhecido) de arquivos. Agora, quero processar os pares correspondentes usando alguma ferramenta ( ImageMagickno meu caso), ou seja, quero executar some_command foo_A_i.bar foo_B_i.bar out_i.bar, onde out_i.barestá o resultado/saída ao executar a ferramenta no par foo_A_i.bare foo_B_i.barpara alguns fixos i.

Minha pergunta é como posso agrupar esse processo? Alguns python, bashroteiro?

Esclarecimento:Por conjunto de arquivos quero dizer uma lista de arquivos, todos começando com a mesma inicial, depois algum UID e tendo a mesma extensão. Isso vale para conjuntos de entrada e saída.

Responder1

Aqui está uma solução possível, que funciona, embora não saiba se é boa.

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

Executá-lo deve ser algo como:

script foo_A_ foo_B_ out_

Responder2

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

Supondo que ambos os arquivos estejam classificados, a linha de contagem obtém o número de linhas no arquivo a. Em seguida, um loop percorre todos os valores de 1..count. A variável de contagem contém o nome do arquivo, que é cortado com ${count/ */}. Com sed, você obtém a mesma linha de ambos os arquivos. -n significa 'sem impressão por padrão', $line"p" imprimirá apenas a linha $line.

informação relacionada