2セットのファイルをバッチ処理する

2セットのファイルをバッチ処理する

foo_A_uid.bar2 セットのファイルとがあるとしますfoo_B_uid.bar。各セットには (既知の) 数のファイルが含まれています。ここで、何らかのツール (ImageMagick私の場合) を使用して対応するペアを処理します。つまり、 を実行します。ここで、 はsome_command foo_A_i.bar foo_B_i.bar out_i.bar、ペアおよび何らかの固定された に対してout_i.barツールを実行したときの結果/出力です。foo_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-variable にはファイル名が含まれており、これは で切り捨てられます${count/ */}。sed を使用すると、両方のファイルから同じ行が取得されます。-n は「デフォルトでは印刷しない」ことを意味し、$line"p" は行 $line のみを印刷します。

関連情報