将每个第n个场地相乘......优雅

时间:2013-08-29 21:33:32

标签: awk sed terminal xargs

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

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

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

1 2 12 2 2 18 3 4 21 4 4 24 2 4 18 5 5 24

现在,我已经敲定了一个解决方案,但我知道那里有一个更快,更优雅的解决方案。这就是我的工作:

xargs -n1 < input.txt | awk '{printf NR%3 ? "%d " : $0*3" ", $1}' > output.txt

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

2 个答案:

答案 0 :(得分:4)

尝试:

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

我还没有测试过(发布在我的iPod上)。不带参数的print命令应打印出整个(部分修改的)行。您可能必须在OFS=" "部分中设置BEGIN以将空白作为输出中的分隔符。

答案 1 :(得分:4)

这一行也适用:

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