【发布时间】:2014-01-11 19:18:10
【问题描述】:
我想比较并报告 2 个文件中的相似字符串: 每次读取file1的1行,在file2中搜索字符串,如果可以在file2中找到,则打印前一行,字符串和字符串后的2行
infile2:
john
jack
jeff
infile1:
22894
john
street3
city
56438
danny
street2
city
22894
john
street3
city
33456
jeff
street2
city
22894
john
street3
city
输出
22894
john
street3
city
22894
john
street3
city
33456
jeff
street2
city
22894
john
street3
city
我可以为此编写一个 perl 脚本 perl script.pl infile2 infile1
#!/usr/bin/perl
use warnings;
use strict;
my ($infile1) = $ARGV[0];
my ($infile2) = $ARGV[1];
open(my $fh1, "<$infile1");
open(my $fh2, "<$infile2");
while(( my @lines = map ~~<$fh1>, 1 .. 4 )[0] and (my $names = <$fh2>)) {
#print $lines[1];
#print "\n";
if ($lines[1] eq $names){
print ("$lines[0]$lines[1]$lines[2]$lines[3]");}
}
print ("\n");
但我只得到
22894
john
street3
city
【问题讨论】:
-
缺少一些东西:样本输入、样本输出和[更重要的]您的尝试。
-
这绝对是太宽泛了。
-
对我来说听起来像
grep。grep -f file1 -B1 -A2 file2或许? -
@TLP 我认为您的评论是一个完美的解决方案 - 您可以发布作为答案。我会在 grep 中添加
-w,以确保它匹配整个单词。 -
@fedorqui 好吧,我不确定这是否是他想要的,或者是否有效。但也许值得以评论的形式提示。