将文件中的数字相乘

将文件中的数字相乘

我的 ASCII 文件包含如下数字:

1 2 3
5 6 9
7 8 9 
. . . 
. . . 
. . . 
. . . 
. . .  etc

我想通过将每个值乘以“3”来升级此文件以获得:

3 6 9
15 18 27
21 24 27 
. . . 
. . . 
. . . 
. . . 
. . .  etc

我希望在运行脚本后这些更改能够自动更新并保存在同一个 ASCII 文件中

如何使用标准 GNU 实用程序来完成此任务?我可以通过执行以下操作来更新值:

while IFS=",$IFS" read d1 d2 d3; do 
echo $(( $d1*3 )) $(( $d2*3 )) $(( $d3*3 )) 
done < file.txt #file.txt is the previous ASCII file

答案1

使用 awk:

$awk -F" "  '{$1*=3;$2*=3;$3*=3;print}' FILE | sponge FILE
$cat FILE
3 6 9
15 18 27
21 24 27
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0

更新:您可以使用sponge程序将输出写入输入文件

Sponge 读取标准输入并将其写入指定文件。与 shell 重定向不同,sponge 在打开输出文件之前吸收所有输入。这允许限制读取和写入同一文件的管道。

答案2

这样您就可以将新值保存到文件中:

awk -F" "  '{$1*=3;$2*=3;$3*=3;print}' FILE | tee FILE

相关内容