awk поиск поля в другом файле - PullRequest
4 голосов
/ 11 мая 2011

Мне нужно искать поля из одного файла во втором файле. Хотите знать, является ли awk правильным решением? 1001 *

файл 1

one
two

файл 2

something one
balh   one
blah two
blah two

требуемый выход

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

Я надеялся, что смогу использовать awk с in awk, отыскивая каждую строку в секунду и создавая результат.

Ответы [ 2 ]

3 голосов
/ 11 мая 2011

Если вы готовы принять немного другой вывод в обмен на более простое решение, то grep - ваш инструмент:

grep -f file1 file2

Приведенная выше команда поиска file2 для всех токенов в file1.

3 голосов
/ 11 мая 2011

Достаточно одного вызова 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}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...