在AWK中合并两行

时间:2013-01-15 20:49:07

标签: awk

我的数据格式如下:

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 个答案:

答案 0 :(得分: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

答案 1 :(得分: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()
    }
'