我有一个包含一系列数字的文本文件:
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
可以做到吗?
答案 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