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

我想要这个输出,从第二列打印相等的值,从第三列打印相等但符号相反的值,并从第四列打印相等的值。

输出应该是这样的::

1639,          709.87366,       -20.150133
4

2 回答 2

3

您可以简单地逐行读取文件,然后

@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 回答