Найти совпадения из индексного файла без точного соответствия и распечатать последнее поле

У меня большой файл (~ 6mill rows) с 2 столбцами, который выглядит так:

1111.aaaaabbb.b.cccc.c ValueA 2222.dddddeee.e.ffff.f ValueB 3333.gggghhhh.h.iiii.i ValueC 

Я хочу использовать это как мой индекс при поиске в этом файле с одним столбцом:

 aaaaabbb.b dddddeee.e gggghhhh.h 

И вернуться:

 ValueA ValueB ValueC [...] Valuen а ValueA ValueB ValueC [...] Valuen 

Как вы можете видеть, я просто забочусь о значении после первого периода, если есть точное совпадение содержимого второго файла с первым файлом (не точный), я хочу, чтобы он возвращал значение столбца 2 с первого файл. Я не забочусь о префиксе / суффиксе содержимого первого файла, пока точное совпадение содержимого файла 2.

Есть ли способ сделать это с помощью awk или любого инструмента bash ? В настоящее время я пытаюсь правильно отформатировать данные в Excel (data to column tool), но это занимает много времени, так как у меня более 6 миллионов строк, поэтому мне приходится вручную делать 6 файлов, а затем скомпилировать результаты вместе.

Изменить содержимое file1 : префикс всегда числен, но имеет длину от 4 до 7 цифр. Содержимое после первого периода является буквенно-цифровым и варьируется в пределах от 4 до 15 символов и может начинаться с цифр или букв, а суффикс – номера / алфавиты.

One Solution collect form web for “Найти совпадения из индексного файла без точного соответствия и распечатать последнее поле”

Я предполагаю, что файл с индексом не слишком велик, чтобы его можно было полностью загрузить в память. Если да, вы можете использовать этот awk :

 awk -F"[. ]" 'FNR==NR{a[$0]=1} FNR!=NR&&a[$2"."$3]{print $NF}' index_file huge_file 

  • awk вызывается с двумя файлами: index_file с содержимым для поиска и huge_file со многими строками, как в вопросе.
  • -F"[. ]" Устанавливает разделитель awks в пространство и точку.
  • FNR==NR применяется только к index_file
    • a[$0]=1 заполнить массив a шаблонами поиска как индексы и установить значение 1 , только чтобы массив был построен.
  • FNR!=NR применяется только к huge_file .
  • a[$2"."$3] если существует индекс массива поля 2 и поле 3, конкатенированные точкой (когда шаблон найден) …
    • print $NF напечатать последнее поле файла.

Выход:

 ValueA ValueB ValueC а ValueA ValueB ValueC 
  • Как найти все соответствия регулярному выражению в строке
  • Сценарий Awk работает только в том случае, если я редактирую текстовый файл вручную
  • gawk - Динамическое создание текстового файла с использованием полей входных файлов
  • Файл анализа с Awk только в том случае, если первая строка соответствует шаблону
  • Как получить последнее вхождение строк между двумя шаблонами из файла?
  • Найдите не точное соответствие и возвращаемый столбец 1 этого файла
  • Как повторить последовательность чисел в столбце с помощью команды awk
  • Разница между gawk и awk
  • patsplit vs раскол в gawk
  • Как подключить сортировку к gawk?
  • Как получить значение последнего дня в текущем месяце в awk
  • Linux и Unix - лучшая ОС в мире.