Сопоставить два столбца из одного файла с двумя столбцами из другого файла и вернуть другой столбец из первого файла - PullRequest
1 голос
/ 07 ноября 2019

Мне нужно сопоставить столбцы 2 и 5 из файла 1 со столбцами 2 и 4 из второго файла. Если совпадение, вернуть новый столбец в файле 2, содержащий значения из 4-го столбца файла 1.

file_1

10  43572716    43572935    22  AMP
10  43572716    43572935    26  DEL
18  48578898    48579056    71  DEL

File_2

10  43572716    43572935    DEL 1   RET -0,5    0,51    218,164 0,58    255,89  0,73    0,79    0,85
18  48578898    48579056    DEL 1   SMAD4   -0,9    0,23    8,70886 0,02    16,665  0,05    0,4 0,52

Файл_2 содержит много других столбцов

Я пробовал код ниже, но он возвращает весь файл

awk 'FNR==NR{a[$2 FS $5]=$0;next} (($2 FS $4) in a) {print a[$2 FS $4],$0}' file_1.bed FILE_2.bed

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

10  43572716    43572935    DEL 1   RET -0,5    0,51    218,164 0,58    255,89  0,73    0,79    0,85    26
18  48578898    48579056    DEL 1   SMAD4   -0,9    0,23    8,70886 0,02    16,665  0,05    0,4 0,52 71

Может кто-нибудь помочь, пожалуйста?

1 Ответ

1 голос
/ 07 ноября 2019

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

awk 'FNR==NR{a[$2,$5]=$4;next} ($2,$4) in a{print $0,a[$2,$4]}' Input_file1 Input_file2

Добавление формы решения, не относящейся к одному вкладышу, следующим образом:

awk '
FNR==NR{
  a[$2,$5]=$4
  next
}
($2,$4) in a{
  print $0,a[$2,$4]
}
' Input_file1  Input_file2


Почему код OP не работал: OP был близок с точки зрения логики выполнения этого, единственное, что было при чтении Input_file1, несмотря на наличие a[$2 FS $5]=$0, это должно быть a[$2 FS $5]=$4и при печати на втором чтении Input_fie должно быть print $0,a[$2 FS $4]. Который я исправил в своем коде выше.

...