我的数据是一个大型文本文件,由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行转换为列然后重复该过程的示例。
答案 0 :(得分:3)
使用awk
执行此操作的惯用方法(阅读高尔夫版本的Tom Fenech's答案):
$ 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
,默认为换行符。
答案 1 :(得分:2)
您可以使用以下内容:
awk '{printf "%s%s", $0, (NR%12?OFS:RS)}' file
NR%12
计算结果为true,除非记录号可以被0整除。如果为真,则使用输出字段分隔符(默认为空格)。如果为false,则使用记录分隔符(默认情况下为换行符)。
测试出来:
$ awk '{printf "%s%s", $0, (NR%12?OFS:RS)}' file
{ 1 2 3 4 5 6 7 8 9 10 }