Соответствие пяти столбцов в двух файлах с использованием Awk

У меня есть два входных файла.

File1:

s2/80 20 . AT 86 F=5;U=4 s2/20 10 . GT 90 F=5;U=4 s2/90 60 . CG 30 F=5;U=4 

File2:

 s2/90 60 . GG 97 F=5;U=4 s2/80 20 . AA 20 F=5;U=4 s2/15 11 . AA 22 F=5;U=4 s2/90 21 . CC 82 F=5;U=4 s2/20 10 . G . 99 F=5;U=4 s2/80 10 . TG 11 F=5;U=4 s2/90 60 . GT 55 F=5;U=4 

Ожидаемый результат:

 s2/80 20 . AT 86 F=5;U=4 s2/80 20 . AA 20 F=5;U=4 s2/20 10 . GT 90 F=5;U=4 s2/20 10 . G . 99 F=5;U=4 

Логика: я хочу, чтобы все строки из File1 и File2 были объединены в выходном файле: Условия: если столбец 1, 2, 4 из File1 и File2 точно совпадают, и если в столбце 5 файла File2 есть точка, то есть «.» или если он точно соответствует столбцу 4 файла2.

Код: я попытался использовать скрипт:

 BEGIN{} FNR==NR{ k=$1" "$2 a[k]=$4" "$5 b[k]=$0 c[k]=$4 d[k]=$5 next } { k=$1" "$2 lc=c[k] ld=d[k] # file1 file2 if ((k in a) && ($4==$5) && (lc==$4)) print b[k]" "$0 } 

Но я получаю вывод:

 s2/80 20 . AT 86 F=5;U=4 s2/80 20 . AA 20 F=5;U=4 

Принимая во внимание, что мой вывод должен быть:

 s2/80 20 . AT 86 F=5;U=4 s2/80 20 . AA 20 F=5;U=4 s2/20 10 . GT 90 F=5;U=4 s2/20 10 . G . 99 F=5;U=4 

Буду признателен за вашу помощь. Благодарю.

One Solution collect form web for “Соответствие пяти столбцов в двух файлах с использованием Awk”

 awk ' { key = $1 SUBSEP $2 SUBSEP $4 } # here, we are reading file1 NR == FNR { f1_line[key] = $0 next } # here, we are reading file2 key in f1_line && ($5 == "." || $5 == $4) { print f1_line[key], $0 } ' file1 file2 

выходы

 s2/80 20 . AT 86 F=5;U=4 s2/80 20 . AA 20 F=5;U=4 s2/20 10 . GT 90 F=5;U=4 s2/20 10 . G . 99 F=5;U=4 
  • Проблема с вставкой новой строки между странными html-символами в html-файле - UTF-8
  • Заменить только на первую совпадающую строку с sed
  • Удалить строки до заголовка с помощью sed
  • удалять дубликаты на основе значения другого столбца
  • Найдите каждую строку, соответствующую шаблону, но напечатайте только строку над ней
  • Заменить только первый символ совпадающего шаблона
  • Получить текст между шаблоном начала и конечным шаблоном на основе шаблона между шаблоном начала и конца
  • Как заменить этот шаблон на новую строку внутри?
  • Использовать sed для форматирования абзацев для латекса
  • Печать данных между двумя строками (только если существует «конец диапазона») из текстового файла
  • Как сгруппировать группу строк на основе информации из первой строки?
  • Interesting Posts

    Показать маску сети с помощью ip-инструмента

    Как избавиться от среды рабочего стола и использовать только оконный менеджер?

    сломанные пакеты при установке mysql 5.6 с помощью apt-get

    Разница между командами V и S в нормальном режиме?

    Как определить общие файлы, открытые с помощью userid

    Является ли CTRL + 4 равным ^ 4 или ^ $ в каретной нотации?

    Генерация пары ключей GPG: что означают знаки «плюс» и «минус»?

    Как назначить вывод cat сценария bash переменной в другом скрипте

    Command 'date + FORMAT' – Что такое% a,% A,% b и т. Д.?

    Как перевести vlc в стабильную версию?

    Конфигурация клиента OpenVPN: сбой команды Route

    Как вы отслеживаете, почему плагин Vim не работает?

    Мой ноутбук выключается при каждом отключении

    systemd shutdown: 90 секундная задержка, logctl показывает тайм-ауты остановки / dev и session-5.scope

    xmodmap проблемы и несоответствия с более чем 4 альтернативными символами на ключ

    Linux и Unix - лучшая ОС в мире.