0

次のようなデータ形式があります。

Ind1 0 1 2
Ind1 0 2 1
Ind2 1 1 0 
Ind2 2 2 0

この出力を得るためにAWKを使用したい:

Ind1 00 12 21
Ind2 12 12 00 

つまり、同じ行名を持つ 2 つの行をそれぞれマージします。

よろしくお願いいたします。

4

2 に答える 2

2

ファイル a.awk:

{
    col2[$1] = col2[$1] $2
    col3[$1] = col3[$1] $3
    col4[$1] = col4[$1] $4
}

END {

    for ( i in col2 )
    {
        print i " " col2[i] " " col3[i] " " col4[i]
    }
}

走る:

cat data | awk -f a.awk

于 2013-01-15T21:10:20.757 に答える
0

このバージョンは、グループ化する必要があるすべての行が連続していることのみを前提としています

awk '
    function output() {
        printf "%s", prev
        for (i=2; i<=NF; i++) 
            printf "%s%s", OFS, col[i]
        print ""
    }
    $1 != prev {
        if (NR != 1) 
            output()
        for (i=2; i<=NF; i++) 
            col[i] = $i
        prev = $1
        next 
    }
    { 
        for (i=2; i<=NF; i++) 
            col[i] = col[i] $i 
    }
    END {
        output()
    }
'
于 2013-01-15T21:31:48.480 に答える