Shell
在文件中就地乘以數字
我的 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
這樣您就可以將新值保存到文件中:
awk -F" " '{$1*=3;$2*=3;$3*=3;print}' FILE | tee FILE
使用 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
程序在輸入文件中寫入輸出海綿讀取標準輸入並將其寫入指定文件。與 shell 重定向不同,海綿在打開輸出文件之前會吸收所有輸入。這允許限制讀取和寫入同一文件的管道。