Mesclando pares de arquivos TIFF em um diretório

1

Por exemplo, digamos que um determinado diretório tenha 1000 arquivos TIFF chamados sample1.TIFF , sample2.TIFF , etc., até sample1000.TIFF . Quero mesclar cada par de arquivos: sample1.TIFF e sample2.TIFF são mesclados em sample1_2.TIFF , sample3.TIFF e sample4.TIFF são mesclados em sample3_4.TIFF e assim por diante. Quando terminar, terei 500 arquivos TIFF mesclados restantes. Como posso fazer isso com scripts Unix / Perl / AIX?

    
por Ranjeet Behera 18.09.2014 / 04:54

1 resposta

2

Para mesclar os TIFFs, você pode usar tiffcp . Por exemplo, você pode escrever um loop simples em Perl :

for ($i= 1; $i<= 100; $i+=2) { 
    $j = $i + 1;    
    system("tiffcp sample$i.TIFF sample$j.TIFF sample$i\_$j.TIFF");
}

Atualização:

Se não houver uma sequência nos arquivos TIFF, ou seja, no lugar de sample1.tif, sample2.tif, você terá abc.tiff, def.tiff..ands on e você precisará mesclar primeiro 2 tiff na pasta como por timestamp, então você pode fazer o seguinte:

Classifique os arquivos TIFF por timestamp usando ls -lt e, em seguida, extraia os nomes de arquivos TIFF da saída. Você pode fazer isso usando awk (veja abaixo) ou se tiver acesso a vim , então você pode usar Ctrl-v para remover as colunas indesejadas de cada linha da saída.

ls -lt | awk '$9 ~ "TIFF$" { print $9 } ' > sorted_TIFFs.list

Quando tiver a lista de arquivos TIFF classificados, você poderá percorrê-los e executar tiffcp usando um simples script Perl . Este script pega o sorted_TIFFs.list que você gerou na etapa anterior como entrada da linha de comando.

#!/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;
    }
}
    
por 18.09.2014 / 05:16