Eu tenho um arquivo ASCII contendo números como segue:
1 2 3
5 6 9
7 8 9
. . .
. . .
. . .
. . .
. . . etc
Quero atualizar este arquivo multiplicando cada valor por "3" para obter:
3 6 9
15 18 27
21 24 27
. . .
. . .
. . .
. . .
. . . etc
Quero que essas alterações sejam atualizadas e salvas automaticamente no mesmo arquivo ASCII após a execução do script
Como posso fazer isso usando utilitários GNU padrão? Posso atualizar os valores fazendo:
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
Responder1
use 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
atualização: você pode usar sponge
o programa para escrever a saída no ARQUIVO de entrada
esponja lê a entrada padrão e a grava no arquivo especificado. Ao contrário de um redirecionamento de shell, o Sponge absorve toda a sua entrada antes de abrir o arquivo de saída. Isso permite restringir pipelines que leem e gravam no mesmo arquivo.
Responder2
Desta forma você pode salvar novos valores no arquivo:
awk -F" " '{$1*=3;$2*=3;$3*=3;print}' FILE | tee FILE