У меня есть file1 лайки:
0 AFFX-SNP-000541 NA
0 AFFX-SNP-002255 NA
1 rs12103 0.6401
1 rs12103_1247494 0.696
1 rs12142199 0.7672
И файл 2:
0 AFFX-SNP-000541 1
0 AFFX-SNP-002255 1
1 rs12103 0.5596
1 rs12103_1247494 0.5581
1 rs12142199 0.4931
И хотел бы файл3 такой, что:
0 AFFX-SNP-000541 NA 1
0 AFFX-SNP-002255 NA 1
1 rs12103 0.6401 0.5596
1 rs12103_1247494 0.696 0.5581
1 rs12142199 0.7672 0.4931
Что означает поместить 4-й столбец файла2 в файл1 по имени 2-го столбца.
text-processing
awk
join
bioinformatics
Дадун Чжан
источник
источник
Ответы:
Это должно сделать это:
Важно : это предполагает, что ваши файлы отсортированы (как в вашем примере) в соответствии с именем SNP. Если нет, сначала отсортируйте их:
Выход:
Пояснение (с
info join
):Таким образом, вышеприведенная команда объединяет файлы во втором поле и печатает 1-е, 2-е и 3-е поля первого файла, за которым следует 3-е поле файла2.
источник
Вы можете использовать
awk
:выход:
Объяснение:
Проходить
file2
(NR==FNR
верно только для первого аргумента файла). Сохранить столбец 3 в хэш-массив с использованием колонки 2 в качестве ключа:h[$2] = $3
. Затем пройдитесьfile1
и выведите все три столбца$1,$2,$3
, добавив соответствующий сохраненный столбец из хеш-массиваh[$2]
.источник
h[$2] = $3
это присвоение хеша. Это сохранить$3
как значение и$2
как ключ. Пример:h["name"] = "Dadong"
. Теперьprint h["name"]
выходыDadong
. Он делает то, что вы хотите, он точно соответствует второму столбцу из обоих файлов.Если вам не нужно заказывать, то простое решение будет
Это предполагает, что все строки имеют три записи, и столбцы 1 и 2 обоих файлов одинаковы (как в данных вашего примера)
источник
paste
paste
можете ли вы найти способ ответить на это с помощью coreutils?