3

最初の行にヘッダーがある次の 3 つのファイルについて考えてみましょう。

ファイル1:

id name in1
1 jon 1
2 sue 1

ファイル2:

id name in2
2 sue 1
3 bob 1

ファイル3:

id name in3
2 sue 1
3 adam 1

これらのファイルをマージして、次の出力、merged_files を取得したいと考えています。

id name in1 in2 in3
1 jon 1 0 0
2 sue 1 1 1
3 bob 0 1 0
3 adam 0 0 1

このリクエストには、grep/sed/awk/join などで便利な方法で実装されているとは思えないいくつかの特別な機能があります。

4

4 に答える 4

3

GNU のコード:

{
if ($1=="id") { v[i++]=$3; next }
b[$1,$2]=$1" "$2
c[i-1,$1" "$2]=$3
}

END {
printf ("id name")
for (x in v) printf (" %s", v[x]); printf ("\n")
for (y in b)  {
    printf ("%s", b[y])
    for (z in v) if (c[z,b[y]]==0) {printf (" 0")} else printf (" %s", c[z,b[y]])
    printf ("\n")
    }
}
$cat ファイル?
ID名in1
1ジョン1
2 訴える 1
ID名in2
2 訴える 1
3 ボブ 1
ID名 in3
2 訴える 1
3 アダム 1

$awk -f prog.awk ファイル?
ID名 in1 in2 in3
3 ボブ 0 1 0
3 アダム 0 0 1
1 ジョン 1 0 0
2 訴える 1 1 1
于 2013-07-07T05:48:08.647 に答える