user2386222
user2386222

Reputation: 61

transpose a file using a key field in awk

I want to use awk to transpose a file over a group field. Tks

I have a file like this.

id  Name    Value

1 B1 0.1

1 B2 0.3

1 B3 0.4

2 B1 0.2

2 B2 0.09

2 B3 0.10

I want a file like this:

   B1 B2 B3
 1 0.1 0.3 0.4
 2 0.2 0.09 0.10

Upvotes: 0

Views: 140

Answers (1)

Ed Morton
Ed Morton

Reputation: 203597

$ cat tst.awk
BEGIN { OFS="\t" }
NR==1 { next }
(prev != "") && ($1 != prev) {
    if (++nr == 1) {
        print hdr
        rec = prev rec
    }
    print rec
    hdr = ""
    rec = $1
}
{
    hdr = hdr OFS $2
    rec = rec OFS $3
    prev = $1
}
END { print rec }

$ awk -f tst.awk file
        B1      B2      B3
1       0.1     0.3     0.4
2       0.2     0.09    0.10

Upvotes: 1

Related Questions