批量处理两组文件

批量处理两组文件

假设我有两组文件foo_A_uid.barfoo_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

假设两个文件都已排序,计数行将获取文件 a 中的行数。然后循环遍历从 1 到 count 的所有值。计数变量包含文件的名称,该文件的名称以 结尾${count/ */}。使用 sed,您可以从两个文件中获取相同的行。-n 表示“默认不打印”,$line"p" 将只打印行 $line。

相关内容