modifica o arquivo de texto com apenas um número sujeito a restrições

3

Eu tenho um arquivo de texto a.txt cujo conteúdo é um número entre 0 e 100. Eu preciso de um único comando que modifica a.txt, aumentando em 10 o número, mas sob a restrição que o resultado final tem que ser inferior a 100 (ou seja, se o número atinge um valor maior que 100 (por exemplo, 95 + 10 = 105) , fica em 100).

Eu preciso também de um comando para diminuir no máximo 10, mas de tal forma que o resultado final seja maior ou igual a 0, deve ser análogo.

O que eu posso fazer é modificar o arquivo diretamente com o echo, mas desta forma eu posso apenas substituir o número por outra coisa (e não adicionar ao número anterior).

    
por Reyx_0 16.12.2015 / 19:53

2 respostas

5

Isso adicionará 10:

echo "$(awk '{x=$0+10;if(x>100)x=100; print x}' a.txt)" > a.txt

Isto irá subtrair 10:

echo "$(awk '{x=$0-10;if(x<0)x=0; print x}' a.txt)" > a.txt

$0 é o valor da linha atual sendo lida no arquivo, então adicione / subtraia 10 dela e, em seguida, verifique se ela está dentro das restrições.

Graças ao ótimo comentário que o Wildcard criou, você pode fazer isso sem usar um arquivo temporário.

    
por 16.12.2015 / 20:27
1
read bl <a.txt; echo "$((bl<90?bl+10:100))" >a.txt

... deve funcionar se houver apenas uma única linha em a.txt que funcione com um número menor ou igual a 100. Também funcionará se a.txt estiver vazio na maioria dos shells para configurá-lo para um valor de 10. A lógica reversa funciona:

 read bl <a.txt; echo "$((bl<10?0:bl-10))"  >a.txt
    
por 17.12.2015 / 00:11