awk - сравнить два файла и распечатать все столбцы из обоих файлов

Я хочу сравнить два файла

Файл 1:

evm.TU.PTPU-T1.     PF00808
evm.TU.PTP-T1       PF00498 
evm.TU.PTPX-T1      PF00250
evm.TU.PAN-T1       PF00817

Файл 2:

PF00808 CL0012  Histone CBFD_NFYB_HMF   Histone-like transcription factor 
PF00498 CL0357  SMAD-FHA    FHA FHA domain
PF00817 CL0123  HTH Forkhead    Forkhead domain

Вывод:

evm.TU.PTPU-T1 PF00808  CL0012  Histone CBFD_NFYB_HMF   Histone-like
evm.TU.PTP-T1 PF00498   CL0357  SMAD-FHA    FHA FHA domain
evm.TU.PAN-T1 PF00817   CL0123  HTH Forkhead    Forkhead domain

Я пробовал команду ниже

awk 'FNR==NR{a[$1]=$2;next} ($1 in a){print $0,a[$1]}' file2 file1 >file3

, но она печатает только Второй столбец файла 2, не всю строку.

PF00808 evm.TU.PTPU-T1 CL0012

Пожалуйста, дайте мне знать, как добавить всю подходящую строку файла 2 на вывод, а не только второй столбец

1
задан 18 March 2021 в 19:53

1 ответ

У вас есть несколько вариантов здесь:

  1. СОХРАНИТЬ целые строки $ 0 из File2 в массив шпонкой на его $ 1 ; затем посмотреть $ 1 из File1 на основе ключа в его $ 2 :

      $ AWK «NR == FNR {а [$ 1] = $ 0;  Далее} ($ 2 в а) {Печать 1 $, A [$ 2]} 'file2 file1
      evm.tu.ptpu-t1.  PF00808 CL0012 Histone CBFD_NFYB_HMF Гистонско-транскрипционный фактор
      evm.tu.ptp-t1 pf00498 cl0357 smad-fha fha fha fha
      evm.tu.pan-t1 pf00817 cl0123 hth forkhead forkhead домен
     
  2. Сохраните значения $ 1 значений file1 , которые включены в $ 2 , затем посмотрите на соответствующие целые линии file2 на основе ключа В его $ 1

      $ awk 'nr == fnr {A [$ 2] = $ 1} ($ 1 at a) {Печать [$ 1], $ 0}' file1 file2
      evm.tu.ptpu-t1.  PF00808 CL0012 Histone CBFD_NFYB_HMF Гистонско-транскрипционный фактор
      evm.tu.ptp-t1 pf00498 cl0357 smad-fha fha fha fha
      evm.tu.pan-t1 pf00817 cl0123 hth forkhead forkhead домен
     
1
ответ дан 18 March 2021 в 23:25

Другие вопросы по тегам:

Похожие вопросы: