Helpers - компьютеры, интернет, программирование

частичное совпадение между файлами с использованием awk

Я пытаюсь сопоставить $4 в file2 с частичной строкой в ​​$1 из file1 и поместить содержимое $2 в этот файл в $4 из file2, разделенных |. У меня проблема в том, что в file2 строка в $4 выглядит как ADH5_1, а ее соответствие в file1 $1 выглядит как 426_238486_128(ADH5)_1_1. Я не уверен, как лучше всего подойти к этому. Спасибо :).

файл1

426_238486_128(ADH5)_1_1 70
426_238487_128(ADH5)_2_1 50.83
426_238488_128(ADH5)_3.1_1 46.67

файл2

chr4    100009839   100009851   ADH5_1
chr4    100006265   100006367   ADH5_2
chr4    100003125   100003267   ADH5_3

желаемый результат

chr4    100009839   100009851   ADH5_1|70
chr4    100006265   100006367   ADH5_2|50.83
chr4    100003125   100003267   ADH5_3|46.67

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

awk '$1 ~ /AGRN_1/ { print }' file1
awk
23.03.2016

Ответы:


1

awk на помощь!

убери скобку и найди совпадение

$ awk 'NR==FNR{sub(/\(/,"");sub(/\)/,""); a[$1]=$2; next}
     {for(k in a) {if(k~$4) {print $0, a[k]; next}}}' file1 file2

chr4    100009839   100009851   ADH5_1 70
chr4    100006265   100006367   ADH5_2 50.83
chr4    100003125   100003267   ADH5_3 46.67

для разделителя каналов установите -v OFS='|'

23.03.2016

2

Вы можете использовать такой awk-скрипт (проверено с помощью GNU Awk):

FNR==NR { # file 1
    # extract key from $1
    k = gensub( /^.*\(([^)]+)\)_([0-9]+).*$/, "\\1_\\2", 1, $1 )
    m[ k ] = $2 # store value $2 from file1
    next # line (of file1)
    }

    # file2
    {
    print $0 "|" m[$4]
    }

Используйте это так:

awk -f script.awk file1 file2

Первый блок после FNR==NR выполняется для первого файла, next заботится о том, чтобы второй блок не был достигнут для первого файла. Этот блок вычисляет ключ (в формате второго файла) и сохраняет значение под ключом.

Второй блок выполняется только для второго файла, он ищет значение и печатает нужную строку.

23.03.2016
Новые материалы

Интуитивное понимание тензоров в машинном обучении
Тензор является важной концепцией во многих научных областях, таких как математика, физика, обработка сигналов и компьютерное зрение, и это лишь некоторые из них. В математике тензор — это..

Использование машинного обучения для диагностики болезни Альцгеймера, часть 4
Маркеры семантической согласованности для ранней диагностики болезни Альцгеймера (arXiv) Автор: Давиде Колла , Маттео Дельсанто , Марко Агосто , Бенедетто Витиелло , Даниэле Паоло Радичони..

Почему объяснимость так важна прямо сейчас?
По мере того, как системы искусственного интеллекта и инструменты на основе машинного обучения распространяются в нашей повседневной жизни, как практики, так и критики все чаще заявляют о..

Анимированный математический анализ
Использование Manim для создания математических анимированных визуализаций Визуализация данных помогает понять скрытые закономерности в данных, которые невозможно визуализировать..

Создание простого слайдера изображений с помощью JavaScript
Узнайте, как создать базовый слайдер изображений с помощью HTML, CSS и JavaScript. Введение В этом уроке мы создадим удобный слайдер изображений, используя JavaScript, HTML и CSS. Ползунок..

Создание базы данных с помощью супергероя «Python»
В этом посте мы узнаем, как создать «базу данных SQLite с помощью модуля python sqlite3, создав простую функцию входа и регистрации. Готовы ли вы к этому путешествию? Если да , давайте приступим..

ИИ для чайников: руководство для начинающих по пониманию будущего технологий
Вы чувствуете, что остались позади в мире ИИ? Не волнуйтесь, вы не одиноки! Со всей этой шумихой вокруг искусственного интеллекта может быть трудно понять, с чего начать. Но не позволяйте сленгу..