2011-05-11 66 views
4

我需要从第二个文件中的一个文件中搜索字段。想知道如果AWK是正确的解决方案awk搜索另一个文件中的字段

文件1

one 
two 

文件2

something one 
balh one 
blah two 
blah two 

所需的输出

one ["something one", "blah one"] 
two [ "blah two" , "blah two"] 

我希望我能在AWK用awk用,搜索每一行都在第二行并构建输出。 AWK的

+0

这些文件有多大?在awk中编码的东西很可能是可能的,但如果两个文件中都有100000行,那么不可能扩展。 – Perry 2011-05-11 01:13:25

回答

2

一个invokation足够

awk ' 
    FNR == NR { 
     # reading file1 
     values[$1] = "" 
     next 
    } 
    { 
     # reading file2 
     for (elem in values) 
     if ($0 ~ elem) 
      if (values[elem] == "") 
      values[elem] = "\"" $0 "\"" 
      else 
      values[elem] = values[elem] ", \"" $0 "\"" 
    } 
    END { 
     for (elem in values) 
     print elem " [" values[elem] "]" 
    } 
' file1 file2 

可能更容易在像红宝石

keys = File.readlines("file1").collect {|line| line.chomp} 
values = Hash.new {|h,k| h[k] = []} 
File.foreach("file2") do |line| 
    line.chomp! 
    keys.each do |key| 
    if line.include?(key) 
     values[key] << line 
    end 
    end 
end 
values.each {|key,value| puts key + " " + value.inspect} 
3

如果你愿意接受换取简单的解决方案略有不同的输出,那么grep的就是你工具:

grep -f file1 file2 

上面的命令搜索每个令牌的file2文件1。

相关问题