web-dev-qa-db-ja.com

一度に1列ずつ2つのファイルをマージする

次の形式の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

各ファイルの最初の列の値を「:」区切り文字で組み合わせてから、2番目、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

効率は重要ではないので、どの言語でも問題ありません。これまでに質問されたことがある場合は、お詫び申し上げます。

12
Jon Degner

このようなもの?サンプルデータを使用しました:

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
14
tink
awk '{
    getline f2 < "file2"
    split(f2, a)
    for (i=1; i<=NF; i++) 
        printf "%s:%s\t", $i, a[i]
    print ""
}' file1
9
glenn jackman

わずかに異なるアプローチ:

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