1

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

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可以做到?

4

2 回答 2

4

尝试:

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

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

于 2013-08-29T21:45:20.117 回答
4

这条线也可以:

awk -v RS="\\n| " -v ORS=" " '!(NR%3){$0*=3}7' file
于 2013-08-29T21:59:59.960 回答