Perl:从文本文件的第4列减去一个常量(8)

时间:2015-02-02 18:30:45

标签: perl

我的代码有效,除了它在输出文件的开头打印一些垃圾。我可以手动删除它,但更喜欢我的脚本工作。输入文件是由","分隔的19列数字数据。 (逗号空间),第0行的每列标题(我想跳过,另一个问题)。

我用./column3Minus8.pl INPUTFILE>来调用我的文件。 output.txt的

 #!/usr/bin/perl

 use strict;

 while(<>) {
    my @columns = split ", ", $_;
    $columns[3] = sprintf("%.5f", $columns[3] - 8);
    print join ", ", @columns;  
 }

output.txt开头的垃圾是

 #!/usr/bin/perl
 , , , -8.00000
 , , , -8.00000use strict;
 , , , -8.00000
 , , , -8.00000while(<>) {
 , , , -8.00000 my @columns = split ", ", $_;
 , -8.00000 $columns[3] = sprintf("%.5f", $columns[3] - 8);
 , , -8.00000   print join ", ", @columns;  
 , -8.00000}, , , -8.00000

EDITFIX:我在命令行调用中两次调用perl文件导致垃圾。 &#34; ./ column3Minus8.pl column3Minus8.pl INPUTFILE&gt; OUTPUT.TXT&#34;哎呀。我仍然想知道如何跳过第一行。并替换常量。

TODO:用var替换常量8。跳过第0行,不进行编辑。

1 个答案:

答案 0 :(得分:2)

您的计划仍然存在一些小问题。您还应该有use warnings,如果您要修改 last 列,则每行应chomp

该程序添加必要的代码,从命令行中取出第四列的值,并复制文件的第一行。

您应该将其作为

运行
column3minus.pl 8 inputfile > outputfile

#!/usr/bin/perl

use strict;
use warnings;

my $delta = shift;

print scalar <>;  # Duplicate first line

while (<>) {
  chomp;
  my @columns = split /,\s*/;
  $columns[3] = sprintf '%.5f', $columns[3] - $delta;
  print join(', ', @columns), "\n";
}