在awk中将1xA表转换为BxC表
我正在尝试将1xA表转换为BxC表。假设A是15,B是3,C是5,因此在每5个条目之后,我希望它在同一个表中开始一个新行 我有一个相当乏味的方法,似乎接近,因为它错过了一些值后,每5。我认为问题在于在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
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