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