Как сравнить столбцы из разных файлов и заменить значение в одном столбце? - PullRequest
0 голосов
/ 24 мая 2019

У меня есть два файла:

input1

22 rs145072688 14431347  C  G 0.3418 0.648 0.830 0.516 0.506 0.497 0.785 0.586
22   rs201725126 14432618  G  A 0.8119 1.571 1.748 1.661 1.384 1.374 1.614 1.718
22   rs200579949 14433624  G  A 0.8598 1.590 1.669 1.763 1.754 1.832 1.627 1.250
22   rs75454623 14433659  C  A 0.7888 1.564 1.606 1.667 1.355 1.619 1.692 1.775
22   rs199856693 14433758  G  A 0.9354 1.807 1.936 1.906 1.847 1.929 1.734 1.327
22  rs9604721 14434713  C  T 0.9723 1.984 1.984 1.984 1.984 1.984 1.878 1.412

input2

rs145072688:10352:T:TA rs145072688
rs201725126:13116:T:G rs201725126
rs200579949:13118:A:G rs200579949
rs75454623:14930:A:G rs75454623
rs199856693:14933:G:A rs199856693

желаемый вывод:

22 rs145072688:10352:T:TA 14431347  C  G 0.3418 0.648 0.830 0.516 0.506 0.497 0.785 0.586
22   rs201725126:13116:T:G 14432618  G  A 0.8119 1.571 1.748 1.661 1.384 1.374 1.614 1.718
22   rs200579949:13118:A:G 14433624  G  A 0.8598 1.590 1.669 1.763 1.754 1.832 1.627 1.250
22   rs75454623:14930:A:G 14433659  C  A 0.7888 1.564 1.606 1.667 1.355 1.619 1.692 1.775
22   rs199856693:14933:G:A 14433758  G  A 0.9354 1.807 1.936 1.906 1.847 1.929 1.734 1.327
22  rs9604721 14434713  C  T 0.9723 1.984 1.984 1.984 1.984 1.984 1.878 1.412

Так что, если 2-йстолбцы обоих файлов совпадают. Я хочу заменить значения во 2-м столбце в файле input1 значениями в 1-м столбце из input2.

Я пробовал это:

awk 'FNR==NR{a[$1]=$2;next} $2 in a{$2=a[$1]}1' input2 input1

и это

awk 'FNR==NR { F2[$2]=$2 ; next } $2 in F2 {$1 = F2[$1] ; print } ' input2 input1

1 Ответ

0 голосов
/ 24 мая 2019

Ваша первая попытка почти верна.

awk '
    FNR==NR { a[$2]=$1; next }
    $2 in a { $2=a[$2] }
    1
' input2 input1
  • $2 in a ищет $ 2 в ключах a, а не в его значениях
  • , поэтому сохраняйте столбец 2 как значениевместо клавиши для a
  • во втором действии строки, вы должны ссылаться на второй столбец (для input1), а не на первый столбец (для input2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...