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 {
      # 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}

关于awk 搜索另一个文件中的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5958083/

相关文章:

bash - unix bash shell 脚本中的惰性匹配

awk - CLI 将两个不均匀列表组合在两个不同的文件中

algorithm - control+M 字符和 '\r' 字符有什么区别。我们怎么写呢?

bash - 在 bash 中对键进行排序并求和它们的值

bash - 如何使用 awk 标记 $PATH?

bash - 在变量中搜索实例 ID 的所有出现

awk - 删除数据直到字段中的某个字符

bash - 查找行中第一个逗号后的所有内容并将其删除

linux - 如何使用 awk 命令检索特定单词

python - 在 shell 中使用 python,就好像它是 awk