Bir seferde bir sütun olmak üzere iki dosyayı birleştirme


12

Aşağıdaki formatta 2 büyük dosyam (3000 sütun, 15000 satır) var

dosya1 (sekmeyle ayrılmış):

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

dosya2 (sekmeyle ayrılmış):

3 5 2
1 7 10
3 4 3

Her dosyanın ilk sütunundaki değerleri bir ":" ayırıcısıyla birleştirmek, sonra ikinci, üçüncü vb. Sütunlara geçmek istiyorum. İstenen çıktı (sekmeyle ayrılmış):

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

Verimlilik kritik değildir, bu nedenle herhangi bir dil iyidir. Bunun daha önce sorulup sorulmadığı için özür dilerim.

Yanıtlar:


14

Böyle bir şey mi? Örnek verilerinizle çalıştı:

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
Macunu seviyorum. +1
glenn jackman

Yeterince adil @glennjackman; Cevabımı değiştireceğim.
tink

Evet! Mükemmel çalıştı! Hızlı cevabınız için teşekkür ederim.
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

Her ne kadar tink'in tepkisinin basitliğini tercih etsem de mükemmel çalıştı.
Jon Degner

1
@JonDegner o zaman bu cevap (veya bu cevap) sorununuzu çözdüyse, lütfen bir dakikanızı ayırın ve soldaki onay işaretini tıklayarak kabul edin. Bu, soruyu yanıtlandığı gibi işaretler ve Stack Exchange sitelerinde teşekkürlerin ifade edilme şeklidir.
terdon

6

Biraz farklı bir yaklaşım:

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

Bunu iptal ettim, ancak -n 3 bölümünün sadece sağlanan örnek üzerinde çalıştığını fark ettim . Sütun sayımının, gerçek verileri alacak şekilde değiştirilmesi gerekir.
tink

@tink Açıkçası, evet. head -n1 | wc -wAncak , sütun sayısını hesaplayabilirsiniz .
Michael Vehrs

Heh. Bu sizin yanıt vermeniz anlamına gelmiyordu, nasıl çalışılacağının farkındayım ... cevabınızın daha az bir oy vermesi gerektiğine dair bir açıklama:}
tink
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.