Como calcular uma coluna de somas ou testar desigualdades?

0

Dado

34-2
34-5
34-3

Estou procurando obter

34-2=28
34-5=29
34-3=31

Ou, isso também seria útil: dado:

34-2=5
34-5<=34
34-3=31

Estou procurando obter

!   34-2=5
    34-5<=34
    34-3=31

Onde! Há alguma indicação de que desigualdade ou igualdade é falsa. Estou procurando algo que processe arquivos de texto.

    
por e a005 11.05.2012 / 17:13

2 respostas

1

Primeiro caso

perl -nle 'print $_."=".eval($_)' filewithexpressions
  • -n faz um loop sobre as linhas.
  • -l retira novas linhas de $_ , mas separa linhas de saída com novas linhas para você.
  • -e define uma expressão a ser executada.
  • $_ é um marcador para "linha atual".
  • . concatena strings.
  • eval() pegará uma string e a avaliará como código, por exemplo, eval('5+8') retorna 13 .

Segundo caso

Com dois sinais de igual no arquivo, conforme observado em meu comentário à pergunta original:

perl -ne 'print eval($_)?" ":"!",$_' filewithequalities

Como antes, em geral.

  • -l não é necessário / desejado desde que as novas linhas se cuidem neste caso.
  • A construção ?: é um operador ternário . Se a expressão anterior for verdadeira, retorne um espaço em branco, caso contrário, retorne um ponto de exclamação.
por 11.05.2012 / 17:18
0

Aqui está um script python para lidar com a primeira parte da sua pergunta:

import sys
for line in sys.stdin:
    print "%s=%s" % (line.rstrip(), eval(line))

Coloque o código acima em test.py , insira a entrada em test.dat e execute da seguinte forma:

python test.py < test.txt

Estou assumindo um sistema operacional unix. Observe que pode ser perigoso passar a entrada para qualquer script que execute eval --- não passe dados desconhecidos para esse script.

    
por 11.05.2012 / 17:23

Tags