
두 개의 파일 세트 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 줄만 인쇄합니다.