두 세트의 파일을 일괄 처리

두 세트의 파일을 일괄 처리

두 개의 파일 세트 foo_A_uid.barfoo_B_uid.bar. 각 세트에는 (알려진) 개수의 파일이 포함되어 있습니다. 이제 일부 도구(내 경우에는)를 사용하여 해당 쌍을 처리하고 싶습니다 ImageMagick. 즉, 쌍에서 도구를 실행할 때 결과/출력이 있고 some_command foo_A_i.bar foo_B_i.bar out_i.bar일부 고정 된 .out_i.barfoo_A_i.barfoo_B_i.bari

제 질문은 이 프로세스를 어떻게 일괄 처리할 수 있느냐는 것입니다. 일부 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 줄만 인쇄합니다.

관련 정보