在文本文件中连接具有特定模式的行

时间:2013-06-26 16:20:36

标签: regex join sed awk pattern-matching

我正在尝试根据行中的第一个值连接行。我的文件看起来像这样:

结构是:ID,KEY,VALUE

1 1 Joe
1 2 Smith
1 3 30
2 2 Doe
2 1 John
2 3 20

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

输出应如下所示:

1 Joe Smith 30
2 John Doe 20

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

3 个答案:

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

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

答案 2 :(得分:2)

使用awk

的一种方法
awk '{a[$1]=(a[$1])?a[$1]FS$3:$3}END{for(;x<length(a);)print ++x,a[x]}' <(sort -nk12 file)