Fusion de deux fichiers, une colonne à la fois


12

J'ai 2 gros fichiers (3000 colonnes, 15000 lignes) du format suivant

fichier1 (séparé par des tabulations):

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

fichier2 (séparé par des tabulations):

3 5 2
1 7 10
3 4 3

Je voudrais combiner les valeurs de la première colonne de chaque fichier avec un séparateur ":", puis passer aux deuxième, troisième, etc. colonnes. Sortie souhaitée (séparée par des tabulations):

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

L'efficacité n'est pas critique, donc n'importe quelle langue est très bien. Je m'excuse si cela a déjà été demandé.

Réponses:


14

Quelque chose comme ça? Travaillé avec vos exemples de données:

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
J'adore la pâte. +1
glenn jackman

Assez juste @glennjackman; Je vais modifier ma réponse.
tink

Oui! Fonctionne parfaitement! Merci pour la réponse rapide.
Jon Degner du

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

Fonctionne parfaitement, même si je préfère la simplicité de la réponse de Tink.
Jon Degner

1
@JonDegner alors si cette réponse (ou celle-ci) a résolu votre problème, veuillez prendre un moment et l' accepter en cliquant sur la coche à gauche. Cela marquera la réponse à la question et c'est la façon dont les remerciements sont exprimés sur les sites Stack Exchange.
terdon

6

Une approche légèrement différente:

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

J'ai voté pour cela, mais je viens de réaliser que la partie -n 3 ne fonctionne que sur l'échantillon fourni. Le nombre de colonnes doit être modifié pour tenir compte des données réelles.
tink

@tink Évidemment, oui. head -n1 | wc -wCependant, vous pouvez calculer le nombre de colonnes avec quelque chose comme .
Michael Vehrs

Il h. Cela ne vous était pas destiné à répondre, je sais très bien comment contourner cela ... juste une explication que votre réponse devrait avoir un vote positif de moins:}
tink
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.