usermrt
usermrt

Reputation: 53

Transpose column to row using awk

In my data file, there is a certain column I am interested. So I used awk to print out only that column (awk '{print $4}') and put a condition to eliminate using "if". However, I could not figure out how to transpose every nth line on that column to new row.

input:

1
2
3
4
5
6
7
8
9

desired output:

1  4  7
2  5  8
3  6  9

I have checked out the other solutions and tried but none of them gave me what I want. I will appreciate if anyone could help me with that.

Upvotes: 1

Views: 946

Answers (3)

Sundeep
Sundeep

Reputation: 23707

you can also use pr here

$ seq 9 | pr -3ts' '
1 4 7
2 5 8
3 6 9
$ seq 9 | pr -5ts' '
1 3 5 7 9
2 4 6 8

where the number indicates how many columns you need and the s option allows to specify the delimiter between columns

Upvotes: 6

Thor
Thor

Reputation: 47249

The columns program from the autogen package can do this, e.g.:

seq 9 | columns --by-column -w1 -c3

Output:

1 4 7
2 5 8
3 6 9

Upvotes: 2

James Brown
James Brown

Reputation: 37464

Using awk:

$ seq 9 | 
awk ' {
    i=((i=NR%3)?i:3)                # index to hash a
    a[i]=a[i] (a[i]==""?"":" ") $1  # space separate items to a[i]
} 
END {
    for(i=1;i<=3;i++)               # from 1 to 3 (yes, hardcoded)
        print a[i]                  # output
}'

Output:

1 4 7
2 5 8
3 6 9

Upvotes: 2

Related Questions