Hợp nhất hai tệp, một cột cùng một lúc


12

Tôi có 2 tệp lớn (3000 cột, 15000 hàng) có định dạng sau

file1 (tách tab):

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

file2 (tách tab):

3 5 2
1 7 10
3 4 3

Tôi muốn kết hợp các giá trị từ cột đầu tiên của mỗi tệp với dấu phân cách ":", sau đó chuyển sang cột thứ hai, thứ ba, v.v. Đầu ra mong muốn (tách tab):

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

Hiệu quả không quan trọng, vì vậy bất kỳ ngôn ngữ nào cũng tốt. Tôi xin lỗi nếu điều này đã được hỏi trước đó.

Câu trả lời:


14

Một cái gì đó như thế này? Làm việc với dữ liệu mẫu của bạn:

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
Tôi thích dán. +1
jackman jackman

Đủ công bằng @glennjackman; Tôi sẽ sửa đổi câu trả lời của tôi.
tink

Đúng! Làm việc hoàn hảo! Cảm ơn đã phản ứng nhanh chóng.
Jon Degner

9
awk '{
    getline f2 < "file2"
    split(f2, a)
    for (i=1; i<=NF; i++) 
        printf "%s:%s\t", $i, a[i]
    print ""
}' file1

Hoạt động hoàn hảo, mặc dù tôi thích sự đơn giản của phản ứng của tink.
Jon Degner

1
@JonDegner sau đó nếu câu trả lời đó (hoặc câu hỏi này) đã giải quyết vấn đề của bạn, vui lòng dành chút thời gian và chấp nhận nó bằng cách nhấp vào dấu kiểm bên trái. Điều đó sẽ đánh dấu câu hỏi đã được trả lời và là cách cảm ơn được thể hiện trên các trang web Stack Exchange.
terdon

6

Một cách tiếp cận hơi khác:

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

Tôi đã nêu lên điều này, nhưng chỉ nhận ra rằng phần 3n chỉ hoạt động trên mẫu được cung cấp. Số lượng cột cần được sửa đổi để phù hợp với dữ liệu thực tế.
tink

@tink Rõ ràng là có. Bạn có thể tính toán số cột với một cái gì đó như head -n1 | wc -w, tuy nhiên.
Michael Vehrs

Heh. Điều đó không có nghĩa là để bạn trả lời, tôi nhận thức rõ về cách giải quyết xung quanh nó ... chỉ là một lời giải thích rằng câu trả lời của bạn nên có một upvote ít hơn:}
tink
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.