0
#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

私はこの出力が必要です.2列目から等しい値を出力し、3列目から等しいが符号が反対の値を出力し、4列目から等しい値を出力します.

出力は次のようになります::

1639,          709.87366,       -20.150133
4

2 に答える 2

3

ファイルを1行ずつ読み取るだけで、

@numbers = split /\s+/, $line;

また

# includes comma in the split pattern to select just the number
@numbers = split /,\s+/, $line; 

そして選択

$numbers[1], $numbers[2], $numbers[3]

あなたが要求したものを出力する簡単なスクリプトは次のとおりです。

#!/usr/bin/perl -w

use strict;

open FILE, '<', 'input.txt';

foreach my $line (<FILE>)
{
  my @numbers = split /,\s+/, $line;
  printf "%d,\t%f,\t%f\n", $numbers[1], -1*$numbers[2], $numbers[3];
}

close FILE;
于 2012-08-01T11:48:22.510 に答える
0

多分このように:

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
于 2012-08-01T13:52:26.257 に答える