將文件中的數字相乘

將文件中的數字相乘

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

相關內容