这一定是个基本问题,但我找不到满意的答案。我这里有一个脚本,用于将CSV格式的数据转换为TSV。我以前从未使用过Perl,我需要知道如何保存Perl脚本运行后打印的数据。
下面的脚本:
#!/usr/bin/perl
use warnings;
use strict;
my $filename = data.csv;
open FILE, $filename or die "can't open $filename: $!";
while (<FILE>) {
s/"//g;
s/,/\t/g;
s/Begin\.Time\.\.s\./Begin Time (s)/;
s/End\.Time\.\.s\./End Time (s)/;
s/Low\.Freq\.\.Hz\./Low Freq (Hz)/;
s/High\.Freq\.\.Hz\./High Freq (Hz)/;
s/Begin\.File/Begin File/;
s/File\.Offset\.\.s\./File Offset (s)/;
s/Random.Number/Random Number/;
s/Random.Percent/Random Percent/;
print;
}
所有分析的数据都在cmd提示符下。如何保存这些数据?
编辑: 谢谢大家!它工作得很好!
答案 0 :(得分:1)
从你的cmd提示符:
perl yourscript.pl > C:\result.txt
在这里运行perl脚本并将输出重定向到名为result.txt
的文件答案 1 :(得分:0)
将CSV文件中的所有逗号视为字段分隔符始终存在潜在危险。 CSV文件还可以包含嵌入在数据中的逗号。这是一个例子。
1,"Some data","Some more data"
2,"Another record","A field with, an embedded comma"
在您的代码中,行s/,/\t/g
将所有标签视为相同,并且最终字段中的嵌入式逗号也会扩展为标签。这可能不是你想要的。
这是一些使用Text :: ParseWords正确执行此操作的代码。
#!/usr/bin/perl
use strict;
use warnings;
use Text::ParseWords;
while (<>) {
my @line = parse_line(',', 0, $_);
$_ = join "\t", @line;
# All your s/.../.../ lines here
print;
}
如果你运行它,你会发现最后一个字段中的逗号没有得到更新。