我有两个数字列表
file1有姓名和号码
alaska5554443333
california5556667777
hawaii5555559999
file2只有数字,但只有前6个
555333
555999
555222
我如何搜索file1并从file2中取出任何匹配,同时只查看前6个数字,这样我就不会意外地从数字的中间或末尾取出匹配项?
当我有完整的数字时,我使用grep -v -f file2 file1>浏览了该文件。 file3,以便我从file1中提取所有在file2中没有匹配项的名称和数字。
答案 0 :(得分:1)
您需要预处理file2。
sed 's/^/^[^0-9]+/' < file2 | egrep -v -f - file1
这会在file2中的每个数字前添加正则表达式。该表达式查找一个非数字字符串,后跟file2的每一行中的数字。
egrep
然后使用这些模式从file1中排除行。
答案 1 :(得分:0)
我会使用perl:
open NAMESANDNUMS, "<namesandnums.txt" or die $!;
my @namesandnums = <NAMESANDNUMS>;
close NAMESANDNUMS or die $!;
open NUMBERS, "<numbers.txt" or die $!;
my @numbers = <NUMBERS>;
close NUMBERS or die $!;
foreach(@namesandnums) {
if(/[a-z]+(\d{6})/) {
my $cnum = $1;
foreach(@numbers) {
print $_ if($_ == $cnum);
}
}
}