perl + print到file_out就位到标准输出

时间:2010-07-21 02:54:24

标签: perl

我有以下脚本

#!/usr/bin/perl 
open IN, "/tmp/file"; 
s/(.*)=/$k{$1}++;"$1$k{$1}="/e and print while <IN>; 

如何将脚本的输出打印到文件到位以打印到标准输出?

利迪娅

2 个答案:

答案 0 :(得分:0)

只需在print语句后添加要打印的文件句柄;开放写作是一个小小的改变,从开放阅读:

#!/usr/bin/perl -w
open IN, "/tmp/file";
open OUT, '>', "/tmp/file_out";
s/(.*)=/Sk_$1_++;"$1Sk_$1_="/ and print OUT while <IN>;

(我更换了一下,所以我更容易测试。)

答案 1 :(得分:0)

#!/usr/bin/perl 
open IN, "/tmp/file"; 
open OUT, ">file_out.txt";
s/(.*)=/$k{$1}++;"$1$k{$1}="/e and print OUT while <IN>; 

说明:

  • `打开IN,“/ tmp / file”
    • open命令打开文件
    • IN文件句名
    • /tmp/file用于阅读的文件名和说明符
      • 如果没有修饰符,则表示阅读
      • 如果有<,即"</tmp/file",也意味着阅读
  • `打开OUT,“&gt; file_out.txt”
    • open命令打开文件
    • OUT文件句名
    • >file_out.txt用于阅读的文件名和说明符
      • 必须有>,即">file_out.txt"才能写
  • s/.../.../e您的替换(我假设您知道它的作用)
  • and是一个布尔运算符short-circuits,这意味着如果事先是真的,它只会事后发生。在这种情况下,只有在替换实际匹配的情况下才会打印。
  • print OUT打印到文件句柄OUT
  • 对于文件句柄while <IN> 后面的文件中的每一行,
  • IN

注意:

以这种方式使用,它广泛使用了神奇的默认变量$_。在perlintro网站上搜索$_。简而言之:

  • 如果您没有告诉s///替换要处理的字符串,则会使用$_
  • 如果您没有告诉print要打印的内容,则会打印$_
  • 如果你没有告诉while循环通过文件句柄的数据放置每一行,它会被放入$_

您的程序可能已被重写:

#!/usr/bin/perl 
open IN, "/tmp/file"; 
open OUT, ">file_out.txt";
while( defined( $line = <IN> ) )
{
  $line =~ s/(.*)=/$k{$1}++;"$1$k{$1}="/e or next;
  print OUT $line;
}