私の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は標準入力を読み取り、それを指定されたファイルに書き込みます。シェルリダイレクトとは異なり、スポンジは出力ファイルを開く前にすべての入力を吸収します。これにより、同じファイルを読み書きするパイプを制限できます。
答え2
このようにして新しい値をファイルに保存できます。
awk -F" " '{$1*=3;$2*=3;$3*=3;print}' FILE | tee FILE