我的 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