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 

即合并每两行具有相同的行名。

非常感谢您的帮助。

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 回答