我的数据是由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行转换成列,然后重复上述过程的例子。
你可以使用这样的事情:
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 }
下面是一个地道的方式(阅读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
代表输出记录分隔符。 我们设置ORS
到FS
在默认情况下是除非我们把它设置为12行每行空间RS
默认情况下为一个换行符。