Соответствие пяти столбцов в двух файлах с использованием 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 
  • sed / awk заменяет определенный шаблон под другим шаблоном
  • Как найти совпадения с sed (или аналогичными) для параметров конфигурации?
  • Как найти текст, скопировать его и вставить в следующую строку в файле?
  • Поиск и замена нескольких строк в скрипте с помощью команд vim (поиск и замена) без sed?
  • Заменить текст другим
  • Как заменить третьего символа на другой персонаж
  • Как сопоставить и заменить значение атрибута внутри тега
  • `sed: -e выражение # 1, char 4: неизвестная команда:` но окончательные строки в порядке
  • Удалить все строки, содержащие повторяющиеся буквы
  • Удалите пробелы и круглые скобки в именах файлов с помощью sed
  • простая команда для удаления заголовка и нижнего колонтитула из файла
  • Interesting Posts

    внешние соединения неиспользуемым gvfsd-smb?

    Проблемы с внешним жестким диском Seagate

    Запишите переменную, содержащую большой текст, с \ n в файл с обычными интерпретаторами интерпретаторов. Как ты делаешь это?

    Использование аппаратного управления потоком CTS / RTS на USB

    Как выполнить удаленную команду для существующей сессии ssh

    Использование аппаратных часов в Linux

    Постепенное получение изображения с использованием SANE

    Причина для кэширования ksh -eq

    Как увеличить количество массивов семафоров в Linux?

    использование марионетки для форматирования диска / тома

    Невозможно суммировать числа, полученные от stdin, используя bc

    Модуль Linux Kernel Удаленная отладка с GDB + KGDB, удаленный ответ «g» пакет слишком длинный

    Какое хорошее, небольшое распределение для строительства прибора?

    tslib: курсор мыши перемещается в противоположном направлении в поле выбора

    root не может отправить почту (apticron), но пользователь может (mail / mailx)

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