3

Предположим, что у меня есть два набора файлов 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 и имеют одинаковое расширение. Это верно как для входных наборов, так и для выходных.

2 ответа2

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_
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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .