Convert n number of rows to columns repeatedly usi

2019-08-08 00:18发布

My data is a large text file that consists of 12 rows repeating. It looks something like this:

{
1
2
3
4
5
6
7
8
9
10
}

repeating over and over. I want to turn every 12 rows into columns. so the data would look like this:

{ 1 2 3 4 5 6 7 8 9 10 }
{ 1 2 3 4 5 6 7 8 9 10 }
{ 1 2 3 4 5 6 7 8 9 10 }

I have found some examples of how to convert all the rows to columns using awk: awk '{printf("%s ", $0)}', but no examples of how to convert every 12 rows into columns and then repeat the process.

标签: awk csh gawk
2条回答
虎瘦雄心在
2楼-- · 2019-08-08 00:58

You could use something like this:

awk '{printf "%s%s", $0, (NR%12?OFS:RS)}' file

NR%12 evaluates to true except when the record number is exactly divisible by 0. When it is true, the output field separator is used (which defaults to a space). When it is false, the record separator is used (by default, a newline).

Testing it out:

$ awk '{printf "%s%s", $0, (NR%12?OFS:RS)}' file
{ 1 2 3 4 5 6 7 8 9 10 }
查看更多
看我几分像从前
3楼-- · 2019-08-08 01:08

Here is an idiomatic way (read golfed down version of Tom Fenech's answer) of doing it with awk:

$ awk '{ORS=(NR%12?FS:RS)}1' file
{ 1 2 3 4 5 6 7 8 9 10 }
{ 1 2 3 4 5 6 7 8 9 10 }
{ 1 2 3 4 5 6 7 8 9 10 }

ORS stands for Output Record Separator. We set the ORS to FS which by default is space for every line except the 12th line where we set it to RS which is a newline by default.

查看更多
登录 后发表回答