Как добавить два столбца из трех разных файлов со ссылкой на совпадающие значения в другом столбце? - PullRequest
1 голос
/ 05 марта 2019

Файл 1:

1  0.3
2  0.1
3  0.4
4  0.8

Файл a:

2  0.7
4  0.2
6  0.5
8  0.9

Файл b:

2 0.4
6 0.6

Цель

Шаг за шагомшаг:

  1. Найдите общие значения в поле 1 ($ 1) между файлами 1, a и b.В качестве примера решения вышеуказанных файлов:
    • Файл 1, Файл a и Файл b имеют общее значение в $ 1 = 2.
    • Файл 1 и Файл a также имеют общее значениев $ 1 = 4
  2. Выходной файл 1 со следующими изменениями:
    • Для $ 1 = 2, затем $ 2 = 0,1 + 0,7 + 0,4 = 1,2
    • Для $ 1 = 4, затем $ 2 = 0,8 + 0,2 = 1,0

Желаемый вывод в файле 2:

1 0.3
2 1.2
3 0.4
4 1.0

А именно, файл 2 =Файл 1, за исключением строк, где $ 1 в файле 1 соответствует $ 1 в файле a или b, был добавлен вместе в $ 2.

аналогичная проблема

Я уже получил совет по этой проблеме для сопоставления и добавления двух файлов с использованием кода

 awk 'FNR==NR{a[$1]=$2;next} {$2=$1 in a?$2+a[$1]:$2} 1' Input_file2  Input_file1 >> output_file

Однако код не может обрабатывать 3 входных файла одновременно.Если я делаю их отдельно (два файла за раз, т.е. Файл 1 + Файл a, затем Файл 1 + Файл b), я в итоге добавляю значение Файла 1 дважды.

Поскольку у меня потенциально есть 3-6 файлов для сравнения, я не могу просто сделать Файл a + Файл b >> Файл c, затем Файл 1 + Файл c >> Файл 2.

Сводка

Я хотел бы сценарий, который может искать совпадения в $ 1 между тремя файлами, а затем печатать $ 2 (Файл 1) + $ 2 (Файл a и / или Файл b) везде, где найдено совпадение в $ 1.Выходными данными является Файл 2, который печатает Файл 1 с новыми суммированными значениями в $ 2, где совпадения в $ 1 произошли.Любая помощь очень ценится!

1 Ответ

1 голос
/ 05 марта 2019

Здесь в одном:

$ awk '
NR==FNR {             # store the file1 to a hash and add to its elements
    a[$1]=$2
    next
}
($1 in a) {
    a[$1]+=$2
}
END {
    for(i in a)
        print i,a[i]  # print in no particular order
}' file1 filea fileb

Выход:

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