
假設我有兩組文件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/ */}
.使用 sed,您可以從兩個檔案中獲得相同的行。 -n 表示“預設不列印”,$line"p" 將只列印行 $line。