Menggabungkan dua file, satu kolom sekaligus


12

Saya memiliki 2 file besar (3000 kolom, 15000 baris) dengan format berikut

file1 (dipisahkan tab):

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

file2 (dipisahkan tab):

3 5 2
1 7 10
3 4 3

Saya ingin menggabungkan nilai dari kolom pertama setiap file dengan pemisah ":", lalu beralih ke kolom kedua, ketiga, dll. Output yang diinginkan (dipisahkan 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

Efisiensi tidak kritis, jadi bahasa apa pun baik-baik saja. Saya minta maaf jika ini sudah ditanyakan sebelumnya.

Jawaban:


14

Sesuatu seperti ini? Bekerja dengan data sampel Anda:

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
Saya suka tempel. +1
glenn jackman

Cukup adil @ glennjackman; Saya akan mengubah jawaban saya.
tink

Iya! Bekerja dengan sempurna! Terima kasih atas tanggapan cepatnya.
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

Bekerja dengan sempurna, meskipun saya lebih suka kesederhanaan dari tanggapan tink.
Jon Degner

1
@JonDegner lalu jika jawaban itu (atau yang ini) menyelesaikan masalah Anda, silakan luangkan waktu dan terima dengan mengklik tanda centang di sebelah kiri. Itu akan menandai pertanyaan sebagai dijawab dan cara terima kasih diungkapkan di situs Stack Exchange.
terdon

6

Pendekatan yang sedikit berbeda:

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

Saya membenarkan ini, tetapi baru menyadari bahwa bagian -n 3 hanya bekerja pada sampel yang disediakan. Jumlah kolom perlu dimodifikasi untuk mengakomodasi data aktual.
tink

@tink Jelas, ya. Namun, Anda dapat menghitung jumlah kolom dengan sesuatu seperti head -n1 | wc -w.
Michael Vehrs

Heh. Itu tidak dimaksudkan untuk Anda tanggapi, saya sangat sadar bagaimana cara mengatasinya ... hanya sebuah penjelasan bahwa jawaban Anda seharusnya memiliki satu kurang upvote:}
tink
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.