3

我正在尝试根据一行中的第一个值连接行。我的文件如下所示:

结构为:ID、KEY、VALUE

1 1乔
1 2 史密斯
1 3 30
2 2 母鹿
2 1 约翰
2 3 20

KEY 代表 ID 的某种属性,在这种情况下,KEY '1' 是名字,'2' 是姓氏,'3' 是年龄。

输出应如下所示:

1乔·史密斯30
2 约翰·多伊 20

我知道这可以通过相当简单的 awk 脚本来完成,但我无法在 SO 或 Google 上找到它。

4

3 回答 3

3
{
    a[$1,$2]=$3
    if ($1>m) {m=$1}
}
END {
    for(i=1;i<=m;i++)
    {
        j=1
        printf i " "
        while (a[i,j] != "")
        {
            printf a[i,j] " "
            j++
        }
    printf "\n"
    }
}
于 2013-06-26T16:46:42.430 回答
2

这个 awk 命令应该可以工作:

awk '$2==1{fn=$3} $2==2{ln=$3} $2==3{age=$3} NR>1 && NR%3==0 {print $1,fn,ln,age}' file
于 2013-06-26T16:41:53.213 回答
2

一种方式awk

awk '{a[$1]=(a[$1])?a[$1]FS$3:$3}END{for(;x<length(a);)print ++x,a[x]}' <(sort -nk12 file)
于 2013-06-26T17:01:31.227 回答