【发布时间】:2012-03-13 05:19:45
【问题描述】:
我有两个文件,一个有一个代码列表,另一个有一个带有名称的代码列表,并且是用竖线分隔的。
例如:)文件 1:
00001
00002
00001
00003
00002
00004
文件 2:*注意某些名称可能是名称 1 1 等。请参阅下面的新示例:
00001 | name1 1 1
00002 | name2 2
00003 | name3 3 3 3
00004 | name4 4 4 4 4
我需要输出在文件 1 中保持相同的结构,但从文件 2 中获取名称,如下所示:
输出文件:
00001 | name1 1 1
00002 | name2 2
00001 | name1 1 1
00003 | name3 3 3 3
00002 | name2 2
00004 | name4 4 4 4 4
等等。我一直在使用我找到并修改的 Perl 脚本,以便从第一个文件中逐行查找文件中的匹配项:
#!/usr/bin/perl -w
use strict;
#FindTextInFile.pl
my ($names, $data) = ("codesonly.txt", "codeandtext.txt");
open (FILE1, $names) || die;
open (FILE2, $data) || die;
undef $/; #Enter "file-slurp mode" by emptying variable indicating end-of-record
my $string = <FILE2>; #Read entire file to be searched into a string variable
$/ = "\n"; #Restore default value to end-of-record variable
while (<FILE1>) {
chomp; #remove new-line character from end of $_
#Use quotemeta() to fix characters that could spoil syntax in search pattern
my $qmname = quotemeta($_);
if ($string =~m/$qmname/i) {
print " $_ \n";
}
else {
}
}
我也一直在 Windows CMD 命令中使用 FINDSTR 函数,但它不会为我逐行输出。我对 PERL 很陌生,所以任何帮助都会很棒,或者如果有更简单的方法可以做到这一点,那将非常有帮助。我将使用的文件约为 1M 行,所以我需要一些快速的文件。
谢谢
【问题讨论】:
-
除非你真的打算自己写,否则试试join。
标签: perl