Рейтинг:3

Можно ли как-нибудь найти в файле время безотказной работы, превышающее 100 дней?

флаг kr

Есть ли способ найти в файле время безотказной работы, превышающее 100 дней, с помощью команд Linux Bash?

Например, файл1 содержит:

Аптайм 172 дня

Аптайм 562 дня

Время работы – 30 дней.

время простоя 197 дней

Какую команду я могу использовать для получения вывода, например:

Аптайм 172 дня

Аптайм 562 дня
user535733 avatar
флаг cn
Это похоже на домашнее задание.
Рейтинг:6
флаг cn

Вот простой аук решение:

awk '$1 == "Время работы" && $3 > 100 {print}' файл1
Аптайм 172 дня
Аптайм 562 дня
Raffa avatar
флаг jp
Может быть и проще `awk '/Uptime/ && $3 > 100' file1`
Рейтинг:5
флаг cn

...и немного сложнее бить решение:

при чтении -r a b c d; делать
   [[ $a = Время работы && $c -gt 100 ]] && printf '%s %s %s %s\n' $a $b $c $d
сделано <время безотказной работы
Аптайм 172 дня
Аптайм 562 дня
Рейтинг:4
флаг it

И grep решение с использованием расширенных регулярных выражений:

grep -E 'Время безотказной работы [[:digit:]]{3}' время безотказной работы | \
  grep -Ev 'Время работы равно 100'

Это найдет строку «Uptime is», за которой следуют не менее 3 цифр, и отбросит точное значение. 100 за которым следует Конец строки.

David Foerster avatar
флаг us
Лучше использовать `[[:digit:]]{3,}` (обратите внимание на запятую) для чисел, содержащих более 3 цифр. Если начальные нули возможны, можно использовать `0*[1-9][0-9]{2,}`, чтобы не включать их в подсчет.
marcelm avatar
флаг cn
@DavidFoerster Выражение в ответе будет работать, потому что оно никак не привязано к концу. Для строки, скажем, из четырех цифр, выражение будет соответствовать только первым трем цифрам, но поскольку выражение заканчивается там, это будет соответствовать строке. Но я согласен, что ваше выражение лучше стиля; оно лучше выражает намерение и с большей вероятностью продолжит работу, если выражение будет изменено.
флаг vn
Разве это не соответствует времени безотказной работы в 100 дней, тогда как в вопросе указано время безотказной работы более 100?
Рейтинг:2
флаг id

Конвертация из моего комментария.

С использованием grep и аук все вместе:

grep "Время работы" файл1 | awk '$3 > 100 {печать}'

Найдите «Время работы» в файл1 а затем посмотрите на 3-й столбец и напечатайте, если он больше 100.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.