Объединение двух файлов по одному столбцу за раз

12

У меня есть 2 больших файла (3000 столбцов, 15000 строк) следующего формата

файл1 (разделенный табуляцией):

1/0 0/0 0/0
0/0 1/1 0/0
1/1 0/1 0/0

файл2 (разделенный табуляцией):

3 5 2
1 7 10
3 4 3

Я хотел бы объединить значения из первого столбца каждого файла с разделителем «:», а затем перейти ко второму, третьему и т. Д. Столбцам. Желаемый вывод (через табуляцию):

1/0:3 0/0:5 0/0:2
0/0:1 1/1:7 0/0:10
1/1:3 0/1:4 0/0:3

Эффективность не критична, поэтому любой язык в порядке. Я прошу прощения, если это было задано ранее.

Джон Дегнер
источник

Ответы:

14

Что-то вроде этого? Работал с вашими примерами данных:

paste  file{1,2} | awk '{for (i=1;i<=NF/2; i++){printf "%s:%s\t",$i,$(NF/2+i)};printf "\n"}'
1/0:3   0/0:5   0/0:2
0/0:1   1/1:7   0/0:10
1/1:3   0/1:4   0/0:3
Дзынь
источник
2
Я люблю пасту. +1
Гленн Джекман
Достаточно честно @glennjackman; Я исправлю свой ответ.
звон
Да! Работал отлично! Спасибо за быстрый ответ.
Джон Дегнер
9
awk '{
    getline f2 < "file2"
    split(f2, a)
    for (i=1; i<=NF; i++) 
        printf "%s:%s\t", $i, a[i]
    print ""
}' file1
Гленн Джекман
источник
Сработало отлично, хотя я предпочитаю простоту ответа Тинка.
Джон Дегнер
1
@JonDegner тогда, если этот ответ (или этот) решил вашу проблему, пожалуйста, найдите время и примите его , нажав на галочку слева. Это пометит вопрос как ответивший и выразит благодарность на сайтах Stack Exchange.
Тердон
6

Немного другой подход:

paste -d: <(xargs -n1 <file1) <(xargs -n1 <file2) | xargs -n 3
Майкл Верс
источник
Я проголосовал за это, но только что понял, что часть -n 3 работает только на предоставленном образце. Количество столбцов необходимо изменить, чтобы учесть фактические данные.
Тинк
@tink Очевидно, да. Вы можете рассчитать количество столбцов с чем-то вроде head -n1 | wc -w, однако.
Майкл Вёрс
Хех. Это не было предназначено для вас, чтобы ответить, я хорошо знаю, как обойти это ... просто объяснение, что ваш ответ должен иметь на один голос меньше:}
tink