Awk 每N个字段相乘…优雅

Awk 每N个字段相乘…优雅,awk,sed,terminal,xargs,Awk,Sed,Terminal,Xargs,我有一个包含一系列数字的文本文件: 1 2 4 2 6 3 4 7 4 4 8 2 6 5 8 我需要将每三个字段乘以3,所以输出为: 1122183421442424418524 现在,我已经想出了一个解决方案,但我知道还有一个更快、更优雅的解决方案。以下是我的工作经验: xargs-n1

我有一个包含一系列数字的文本文件:

1 2 4 2 6 3 4 7 4 4 8 2 6 5 8

我需要将每三个字段乘以3,所以输出为:

1122183421442424418524

现在,我已经想出了一个解决方案,但我知道还有一个更快、更优雅的解决方案。以下是我的工作经验:

xargs-n1output.txt

我觉得一定有一个
awk
1行程序可以做到这一点??如何使
awk
查看每个字段(而不是每个记录),从而不需要调用
xargs
将每个字段放在不同的行上?或者sed能做到吗?

试试:

awk '{for (i=3;i<=NF;i+=3)$i*=3; print}' input.txt > output.txt
awk'{for(i=3;iTry:


awk'{for(i=3;i这一行也可以:

awk -v RS="\\n| " -v ORS=" " '!(NR%3){$0*=3}7' file

这条线也会起作用:

awk -v RS="\\n| " -v ORS=" " '!(NR%3){$0*=3}7' file

不错!这会在一行上返回所有值。但是你没有遗漏一个
print
命令吗?我想
7
只是一个输入错误?@cars10
7
不是一个输入错误。你可以试着从命令中删除它,看看发生了什么事我很想自己去发现,但不幸的是我正在“轻装”地旅行,无法完成任务在我的iPod上显示:-(你能解释一下
7
的作用吗?:@cars10对于一个非零数字(
1、2或7
)awk默认情况下可以
print
。因此
7
将打印当前行。+1你应该提到它只是出于多字符的礼貌。而且,它不是
RS=“\\n |”
您可以使用
RE='[[:space:]]'
如果您愿意,它适用于任何空白空间,并且在每个记录上设置
ORS=RT
可以避免添加尾随空白字符,例如
gawk-vrs='[:space:]''(NR%3){$0*=3;ORS=RT}7'
7
很好!这将在一行上返回所有值。但是你没有遗漏一个
print
命令吗?我假设
7
只是一个输入错误?@cars10
7
不是一个输入错误。你可以尝试从命令中删除它,看看发生了什么事我很想自己找出答案,但不幸的是,我正在“轻装”地行进无法在我的iPod上试用:-(您能解释一下
7
的作用吗?:@cars10对于非零数字(
1、2或7
)awk默认情况下可以
print
。因此
7
将打印当前行。+1您应该提到它只是出于多字符RS的礼貌。另外,它也可以代替
RS=“\\n |”
您可以使用
RE='[[:space:]].
如果您愿意,它适用于任何空白空间,并且在每条记录上设置
ORS=RT
可以避免添加尾随空白字符,例如
gawk-v RS='[:space:]''''(NR%3){$0*=3;ORS=RT}7'
+1,效果很好,而且很清楚。您不需要设置
OFS=“”
这是默认值。+1可以正常工作,而且很清楚。您不需要设置
OFS=“”
,因为这是默认值。