例如,假设给定目录有 1000 个名为 、 等的 TIFF 文件sample1.TIFF
,sample2.TIFF
一直到sample1000.TIFF
.我想合并每对文件:sample1.TIFF
并sample2.TIFF
合并为sample1_2.TIFF
,sample3.TIFF
并sample4.TIFF
合并为sample3_4.TIFF
,依此类推。完成后,我将剩下 500 个合并的 TIFF 文件。如何使用 Unix/Perl/AIX 脚本来做到这一点?
答案1
要合并 TIFF,您可以使用tiffcp。对于您的示例,您可以在中编写一个简单的循环Perl
:
for ($i= 1; $i<= 100; $i+=2) {
$j = $i + 1;
system("tiffcp sample$i.TIFF sample$j.TIFF sample$i\_$j.TIFF");
}
更新:
如果 TIFF 文件上没有序列,即用 abc.tiff、def.tiff.. 等代替 sample1.tif、sample2.tif,并且需要根据时间戳合并文件夹中的前 2 个 tiff,那么你可以执行以下操作:
对 TIFF 文件进行排序时间戳使用ls -lt
,然后从输出中提取 TIFF 文件名。您可以使用(见下文)执行此操作,awk
或者如果您有权访问vim
,则可以使用Ctrl-v
从输出的每一行中删除不需要的列。
ls -lt | awk '$9 ~ "TIFF$" { print $9 } ' > sorted_TIFFs.list
获得排序的 TIFF 文件列表后,您可以遍历它们并tiffcp
使用简单的Perl
脚本运行。该脚本将sorted_TIFFs.list
您在上一步中生成的作为命令行输入。
#!/bin/perl
$file=$ARGV[0];
open FILE, $file || die "Invalid filename";
while ($line=<FILE>) {
chomp($line);
$file1 = $line;
if ($line = <FILE>)
{
chomp ($line);
$file2 = $line;
$prefix= $file1;
$prefix =~ s/\.TIFF//; #to avoid a.TIFF_b.TIFF
system("tiffcp $file1 $file2 $prefix\_$file2\n");
} else {
print "No matching TIFF file, odd number of total files.\n";
exit;
}
}