Дано

34-2
34-5
34-3

Я ищу, чтобы получить

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

Или это также будет полезно: учитывая:

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

Я ищу, чтобы получить

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

Куда! Является ли указание на то, что неравенство или равенство ложно. Я ищу что-то, что обрабатывает текстовые файлы.

2 ответа2

1

Первый случай

perl -nle 'print $_."=".eval($_)' filewithexpressions
  • -n петли по линиям.
  • -l удаляет символы новой строки из $_ , но разделяет выходные строки символами новой строки.
  • -e определяет выражение для запуска.
  • $_ является заполнителем для "текущей строки".
  • . объединяет строки.
  • eval() возьмет строку и оценит ее как код, например, eval('5+8') возвращает 13 .

Второй случай

С двойными знаками равенства в инфиле, как отмечено в моем комментарии к исходному вопросу:

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

Как и прежде в общем.

  • -l не нужен / разыскивается, так как в этом случае новые строки позаботятся о себе.
  • Конструкция ?: Является троичным оператором. Если предыдущее выражение истинно, верните пробел, в противном случае верните восклицательный знак.
0

Вот скрипт на python для обработки первой части вашего вопроса:

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

Поместите приведенный выше код в test.py , поместите ввод в test.dat и запустите так:

python test.py < test.txt

Я предполагаю, что Unix-подобная ОС. Обратите внимание, что может быть опасно передавать входные данные любому сценарию, который выполняет eval - не передавайте неизвестные данные этому сценарию.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .