Пакетная обработка двух наборов файлов

Пакетная обработка двух наборов файлов

Предположим, что у меня есть два набора файлов foo_A_uid.barи foo_B_uid.bar. Каждый набор содержит (известное) количество файлов. Теперь я хочу обработать соответствующие пары с помощью некоторого инструмента ( ImageMagickв моем случае), то есть я хочу запустить some_command foo_A_i.bar foo_B_i.bar out_i.bar, где out_i.barрезультат/выход при запуске инструмента на паре foo_A_i.barи foo_B_i.barдля некоторого фиксированного i.

Мой вопрос в том, как я могу пакетировать этот процесс? Какой-то pythonскрипт bash?

Пояснение:Под набором файлов я подразумеваю список файлов, все начинаются с одного и того же начального, затем идут некоторые UID и имеют одинаковое расширение. Это справедливо как для входных наборов, так и для выходных.

решение1

Вот возможное решение, которое работает, хотя я не знаю, хорошее ли оно.

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

Запуск должен выглядеть примерно так:

script foo_A_ foo_B_ out_

решение2

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

Предполагая, что оба файла отсортированы, count-line возвращает количество строк в файле a. Затем цикл проходит по всем значениям от 1 до count. Переменная count содержит имя файла, которое обрезается с помощью ${count/ */}. С помощью sed вы получаете одну и ту же строку из обоих файлов. -n означает «не печатать по умолчанию», $line"p" тогда просто напечатает строку $line.

Связанный контент