这是脚本:
#!/usr/bin/perl
open (FILE, 'data.txt');
open (FILE2, '>>data2.txt');
while (<FILE>) {
chomp;
($name, $email, $phone) = split("\t");
print FILE2 "Name: $name\n";
print FILE2 "Email: $email\n";
print FILE2 "Phone: $phone\n";
}
close (FILE);
exit;
这是输入文件:
Larry larry@example.com 111-1111
Curly curly@example.com 222-2222
Moe moe@example.com 333-3333
以下是我得到的输出:
Name: Larry larry@example.com 111-1111
Email:
Phone:
Name: Curly curly@example.com 222-2222
Email:
Phone:
Name: Moe moe@example.com 333-3333
Email:
Phone:
电子邮件应该在电子邮件行中,电话号码应该在电话线上。有谁知道为什么这不起作用?我道歉,我正在努力快速了解Perl,这样我就可以创建一个脚本,为我的项目做我需要做的事情。我从here
获得了这个脚本答案 0 :(得分:3)
split("\t")
在选项卡上拆分输入,看起来输入中的字段由简单空格分隔。相反,尝试
split(/ /); # split on single space
split(/\s+/); # split on any "whitespace" - space, tab, etc.
请注意,split
的第一个参数始终被视为正则表达式,为清楚起见,在编写split
调用时,应使用正则表达式而不是字符串。
答案 1 :(得分:1)
我刚试过你的代码。
尝试添加use strict,使用警告。然后运行它。
我正在为手机和电子邮件变量使用未初始化的变量。
#!usr/bin/env perl
use strict;
use warnings;
open (FILE, 'data.txt');
open (FILE2, '>>data2.txt');
while (<FILE>) {
chomp;
my ($name, $email, $phone) = split(" ");
print FILE2 "Name: $name\n";
print FILE2 "Email: $email\n";
print FILE2 "Phone: $phone\n";
}
close (FILE);
exit;
答案 2 :(得分:0)
mod发布了正确的答案,这似乎是你在选项卡上拆分空格分隔的数据。我想补充说,这可以通过单行解决:
perl -ane 'printf "Name: %s\nEmail: %s\nPhone: %s\n", @F;' data.txt > data2.txt
这只是将autosplit -a
开关与printf
组合在一起。非常简单。 “引擎盖下”的代码如下所示:
while (<>) {
my @F = split;
printf "Name: %s\nEmail: %s\nPhone: %s\n", @F;
}