Processamento em lote de dois conjuntos de arquivos

3

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

Minha pergunta é como posso processar esse processo em lote? Algum script python , bash ?

Esclarecimento: Por conjunto de arquivos, quero dizer uma lista de arquivos, todos começam com a mesma inicial, depois com algum UID e com a mesma extensão. Isso mantém os dois conjuntos de entrada e a saída.

    
por Dror 19.01.2012 / 15:02

2 respostas

1

Aqui está uma solução possível, que funciona, embora eu 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

A execução deve ser algo como:

script foo_A_ foo_B_ out_
    
por 19.01.2012 / 16:38
0
#!/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 é executado sobre 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" irá então imprimir linha $ line.

    
por 19.01.2012 / 17:40

Tags