转换n行编号重复使用AWK列(Convert n number of rows to columns

2019-10-20 23:59发布

我的数据是由12行重复一个大的文本文件。 它看起来是这样的:

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

重复一遍又一遍。 我想每12行变成列。 所以数据是这样的:

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

我已经找到了如何将所有的行转换成用awk列的一些例子: awk '{printf("%s ", $0)}' ,但不知道如何每12行转换成列,然后重复上述过程的例子。

Answer 1:

你可以使用这样的事情:

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

NR%12评估为真时,记录号是0。整除当它是真实的,则使用输出字段隔板,只是(默认为一个空格)。 当为假时,该记录分离器用于(默认情况下,换行)。

测试一下:

$ awk '{printf "%s%s", $0, (NR%12?OFS:RS)}' file
{ 1 2 3 4 5 6 7 8 9 10 }


Answer 2:

下面是一个地道的方式(阅读golfed下来版汤姆·费内奇的回答)用做它的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代表输出记录分隔符。 我们设置ORSFS在默认情况下是除非我们把它设置为12行每行空间RS默认情况下为一个换行符。



文章来源: Convert n number of rows to columns repeatedly using awk
标签: awk csh gawk