在awk中将1xA表转换为BxC表

在awk中将1xA表转换为BxC表,awk,getline,Awk,Getline,我正在尝试将1xA表转换为BxC表。假设A是15,B是3,C是5,因此在每5个条目之后,我希望它在同一个表中开始一个新行 我有一个相当乏味的方法,似乎接近,因为它错过了一些值后,每5。我认为问题在于RS,因为新行忘记了RS所需的“空间”,但我尝试将其更改为文件.sum中的其他内容,但仍然没有成功。也许有更好的方法,但我觉得这应该行得通 awk -v RS=" " '{getline a1; getline a2; getline a3; getline a4; getline a5; print

我正在尝试将1xA表转换为BxC表。假设A是15,B是3,C是5,因此在每5个条目之后,我希望它在同一个表中开始一个新行

我有一个相当乏味的方法,似乎接近,因为它错过了一些值后,每5。我认为问题在于
RS
,因为新行忘记了
RS
所需的“空间”,但我尝试将其更改为
文件.sum中的其他内容,但仍然没有成功。也许有更好的方法,但我觉得这应该行得通

awk -v RS=" " '{getline a1; getline a2; getline a3; getline a4; getline a5; print a1,a2,a3,a4,a5}' OFS='\t' file.sum
file.sum(我的1xA):

预期结果(我的BxC):

实际结果:

1  2  3  4  5
7  8  9  10 11
13 14 15 10 11

这应该是最简单的解决方案之一:

xargs -n5 <file
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
您可以删除
{$1=$1}
,但最后会得到一个空行。
NR%5==0
测试记录是否每隔5次,并在需要时插入换行符

选项卡版本:

awk -v RS=" " '{$1=$1} {printf NR%5==0?"%s\n":"%s\t",$0}' file
1       2       3       4       5
6       7       8       9       10
11      12      13      14      15

这应该是最简单的解决方案之一:

xargs -n5 <file
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
您可以删除
{$1=$1}
,但最后会得到一个空行。
NR%5==0
测试记录是否每隔5次,并在需要时插入换行符

选项卡版本:

awk -v RS=" " '{$1=$1} {printf NR%5==0?"%s\n":"%s\t",$0}' file
1       2       3       4       5
6       7       8       9       10
11      12      13      14      15
始终使用
printf“%s”、$0
而不是
printf$0
,这样当输入包含诸如
%s
之类的printf格式字符时,它不会失败。此外,这可能会在某些AWK中产生语法错误,因为三元表达式周围没有paren,并且
NR%5==0?$0“\n”:$0“\t”
=
0(NR%5?”\t):“\n”)
或者最好
$0(NR%5?OFS:ORS)
按预期使用变量。始终使用
printf“%s”,$0
而不是
printf$0
,因此当输入包含诸如
%s
之类的printf格式字符时,它不会失败。此外,这可能会在某些AWK中产生语法错误,因为三元表达式周围没有paren,并且
NR%5==0?$0“\n”:$0“\t”
=
0(NR%5?”\t):“\n”)
或者最好是
$0(NR%5?OFS:ORS)
按预期使用变量。
awk -v RS=" " '{$1=$1} {printf NR%5==0?"%s\n":"%s\t",$0}' file
1       2       3       4       5
6       7       8       9       10
11      12      13      14      15