Об’єднання двох файлів, по одному стовпчику


12

У мене є 2 великих файли (3000 стовпців, 15000 рядків) наступного формату

file1 (розділений на вкладку):

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

file2 (розділений на вкладку):

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
glenn jackman

Досить справедливо @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.
terdon

6

Трохи інший підхід:

paste -d: <(xargs -n1 <file1) <(xargs -n1 <file2) | xargs -n 3

Я підтримав це, але щойно зрозумів, що -n 3 частина працює лише на наданій вибірці. Кількість стовпців потрібно змінити, щоб відповідати фактичним даним.
тинк

@tink Очевидно, що так. head -n1 | wc -wОднак ви можете обчислити кількість стовпців з чимось подібним .
Майкл Транс

Хе. Це не означало для вас , щоб відповісти, я добре обізнаний про те , як працювати навколо нього ... просто пояснення , що ваша відповідь має бути один менше upvote:}
Tink
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.