awk在另一个文件中搜索字段

awk在另一个文件中搜索字段,awk,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就足够了 awk ' FNR == NR { # readi

我需要在第二个文件中搜索一个文件中的字段。想知道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就足够了

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
在Ruby之类的东西中可能更容易

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}
keys=File.readlines(“file1”).collect{line | line.chomp}
values=Hash.new{| h,k | h[k]=[]}
File.foreach(“file2”)do |行|
line.chomp!
钥匙。每个do |钥匙|
如果行。包括?(键)

值[key]如果您愿意接受稍微不同的输出以换取更简单的解决方案,那么grep就是您的工具:

grep -f file1 file2

上面的命令在file2中搜索file1中的每个令牌。

文件有多大?用awk编码是可能的,但如果其中一个/两个文件中都有100000行,则不可能扩展。