批次處理兩組文件

批次處理兩組文件

假設我有兩組文件foo_A_uid.barfoo_B_uid.bar.每組包含(已知)數量的檔案。現在,我想使用一些工具(ImageMagick在我的例子中)處理相應的對,也就是說我想運行some_command foo_A_i.bar foo_B_i.bar out_i.barout_i.bar在對上運行該工具時的結果/輸出foo_A_i.barfoo_B_i.bar某些固定的i

我的問題是如何批次處理這個過程?一些pythonbash腳本?

澄清:我所說的文件集是指文件列表,所有文件都以相同的首字母開頭,然後是一些 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/ */}.使用 sed,您可以從兩個檔案中獲得相同的行。 -n 表示“預設不列印”,$line"p" 將只列印行 $line。

相關內容