
foo_A_uid.bar
2 セットのファイルとがあるとします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-variable にはファイル名が含まれており、これは で切り捨てられます${count/ */}
。sed を使用すると、両方のファイルから同じ行が取得されます。-n は「デフォルトでは印刷しない」ことを意味し、$line"p" は行 $line のみを印刷します。