#input data
11000000, 1637, -7.8737, -20.15022
11000001, 1634, -710.377, -20.150137
11000002, 1639, -709.87366, -20.150133
11000003, 1631, -7.1737, -22.650156
11000004, 1639, 709.87366, -20.150133
11000005, 1630, -710.6, -22.650074
Eu quero esta saída, imprima valores da segunda coluna que são iguais, imprima valores da terceira coluna que são iguais, mas têm sinal oposto, e também imprima valores da quarta coluna que são iguais.
1639, 709.87366, -20.150133
Respostas:
0 para resposta № 1Talvez assim:
while (<DATA>) {
chomp;
@datas = split/,s+/;
$k = sprintf "%s:%s:%s", $datas[1], abs $datas[2], $datas[3];
print join(",t", @datas[1..3]), "n" if (++$hash{$k} > 1);
}
__DATA__
11000000, 1637, -7.8737, -20.15022
11000001, 1634, -710.377, -20.150137
11000002, 1639, -709.87366, -20.150133
11000003, 1631, -7.1737, -22.650156
11000004, 1639, 709.87366, -20.150133
11000005, 1630, -710.6, -22.650074
3 para resposta № 2
você pode simplesmente ler o arquivo linha por linha, então
@numbers = split /s+/, $line;
ou
# includes comma in the split pattern to select just the number
@numbers = split /,s+/, $line;
e selecione
$numbers[1], $numbers[2], $numbers[3]
Um script simples que imprime o que você solicitou pode ser:
#!/usr/bin/perl -w
use strict;
open FILE, "<", "input.txt";
foreach my $line (<FILE>)
{
my @numbers = split /,s+/, $line;
printf "%d,t%f,t%fn", $numbers[1], -1*$numbers[2], $numbers[3];
}
close FILE;