我有以下脚本
#!/usr/bin/perl
open IN, "/tmp/file";
s/(.*)=/$k{$1}++;"$1$k{$1}="/e and print while <IN>;
如何将脚本的输出打印到文件到位以打印到标准输出?
利迪娅
答案 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>;
说明:
open
命令打开文件IN
文件句名/tmp/file
用于阅读的文件名和说明符
<
,即"</tmp/file"
,也意味着阅读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;
}