Сравнение двух столбцов в двух файлах с использованием awk с дубликатами - PullRequest
0 голосов
/ 31 мая 2018

Файл 1

A4gnt   0   0   0   0.3343
Aaas    2.79    2.54    1.098   0.1456
Aacs    0.94    0.88    1.063   0.6997
Aadac   0   0   0   0.3343
Aadacl2 0   0   0   0.3343
Aadat   0.01    0   1.723   0.7222
Aadat   0.06    0.03    1.585   0.2233
Aaed1   0.28    0.24    1.14    0.5337
Aaed1   1.24    1.27    0.976   0.9271
Aaed1   15.91   13.54   1.175   0.163
Aagab   1.46    1.14    1.285   0.3751
Aagab   6.12    6.3 0.972   0.6569
Aak1    0.02    0.01    1.716   0.528
Aak1    0.1 0.19    0.561   0.159
Aak1    0.14    0.19    0.756   0.5297
Aak1    0.16    0.18    0.907   0.6726
Aak1    0.21    0   0   0.066
Aak1    0.26    0.27    0.967   0.9657
Aak1    0.54    1.65    0.325   0.001
Aamdc   0.04    0   15.461  0.0875
Aamdc   1.03    1.01    1.019   0.8817
Aamdc   1.27    1.26    1.01    0.9285
Aamdc   7.21    6.94    1.039   0.7611
Aamp    0.06    0.05    1.056   0.9136
Aamp    0.11    0.11    1.044   0.9227
Aamp    0.12    0.13    0.875   0.7584
Aamp    0.22    0.2 1.072   0.7609

Файл 2

Adar
Ak3
Alox15b
Ampd2
Ampd3
Ankrd17
Apaf1
Aplp1
Arih1
Atg14
Aurkb
Bcl2l14
Bmp2
Brms1l
Cactin
Camta2
Cav1
Ccr5
Chfr
Clock
Cnot1
Crebrf
Crtc3
Csnk2b
Cul3
Cx3cl1
Dnaja3
Dnmt1
Dtl
Ednra
Eef1e1
Esr1
Ezr
Fam162a
Fas
Fbxo30
Fgr
Flcn
Foxp3
Frzb
Fzd6
Gdf3
Hey2
Hnf4

Требуемый результат будет в любом месте совпадения в первом столбце из обоих файлов, распечатать все столбцы в первом файле (включаядубликаты).

Я пробовал

awk 'NR==FNR{a[$1]=$2"\t"$3"\t"$4"\t"$5; next} { if($1 in a) { print $0,a[$1] } }' File2 File1 > output

Но по какой-то причине у меня всего несколько ударов.Кто-нибудь знает почему?

1 Ответ

0 голосов
/ 31 мая 2018

Сначала прочитайте второй файл и сохраните значения 1-го столбца в массиве arr в качестве ключей массива, а затем прочитайте первый файл, если 1-й столбец файла1 существует в массиве arr, который был создан с использованием файла2, затем напечатайте текущую строку /запись из файла1.

awk 'FNR==NR{arr[$1];next}$1 in arr' file2 file1

Преимущество:

, если вы используете a[$1]=$2"\t"$3"\t"$4"\t"$5; next, если какие-либо данные с таким же ключом будут заменены предыдущим значением,

но если вы используете arr[$1];next, мы храним только уникальный ключ, а $1 in arr заботится о дублировании записи, даже если она существует

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...