Dropout
Dropout

Reputation: 13866

joining lines with a specific pattern in a text file

I'm trying to join rows based on the first value in a row. My file looks like this:

the structure is: ID, KEY, VALUE

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

The KEY stands for some kind of attribute of the ID, in this case KEY '1' is first name, '2' is surname and '3' is age.

The output should look like this:

1 Joe Smith 30
2 John Doe 20

I know that this can be done by fairly simple awk script, but I'm having trouble finding it on SO or with Google.

Upvotes: 3

Views: 102

Answers (3)

jaypal singh
jaypal singh

Reputation: 77185

One way with awk

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

Upvotes: 2

captcha
captcha

Reputation: 3756

{
    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"
    }
}

Upvotes: 3

anubhava
anubhava

Reputation: 786091

This awk command should work:

awk '$2==1{fn=$3} $2==2{ln=$3} $2==3{age=$3} NR>1 && NR%3==0 {print $1,fn,ln,age}' file

Upvotes: 2

Related Questions