
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, quero processar os pares correspondentes usando alguma ferramenta ( ImageMagick
no meu caso), ou seja, quero executar some_command foo_A_i.bar foo_B_i.bar out_i.bar
, onde out_i.bar
está o resultado/saída ao executar a ferramenta no par foo_A_i.bar
e foo_B_i.bar
para alguns fixos i
.
Minha pergunta é como posso agrupar esse processo? Alguns python
, bash
roteiro?
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.