Multiplicando números no local em um arquivo

2

Eu tenho o arquivo ASCII contendo números da seguinte forma:

1 2 3
5 6 9
7 8 9 
. . . 
. . . 
. . . 
. . . 
. . .  etc

Eu quero atualizar esse arquivo multiplicando cada valor por "3" para obter:

3 6 9
15 18 27
21 24 27 
. . . 
. . . 
. . . 
. . . 
. . .  etc

Eu 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? Eu 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
    
por Cyrus 11.06.2016 / 19:45

2 respostas

1

Dessa forma, você pode salvar novos valores no arquivo:

awk -F" "  '{$1*=3;$2*=3;$3*=3;print}' FILE | tee FILE
    
por 11.06.2016 / 20:04
2

use o 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 o programa sponge para escrever saída na entrada FILE

sponge reads standard input and writes it out to the specified file. Unlike a shell redirect, sponge soaks up all its input before opening the output file. This allows constricting pipelines that read from and write to the same file.

    
por 11.06.2016 / 19:53