Сравните два файла на значение больше, чем

В ответе, на который вы ссылаетесь в своем вопросе, используется расширенный синтаксис проверки bash (двойная скобка), тогда как вы пытаетесь использовать оператор проверки POSIX с одной скобкой. Разница в том, что в тесте с двойными скобками правая часть == рассматривается как шаблон, а не подвергается разбиению на слова или расширению glob. Таким образом, если [ $f == *.a ] приводит к ошибке [: слишком много аргументов, вы можете сделать

for f in *; do if [[ $f == *.a ]]; then echo "$f"; fi; done

или (более компактно)

for f in *; do [[ $f == *.a ]] && echo "$f"; done

Альтернативно, поскольку вы, похоже, используете bash, вы можете использовать оператор =~ регулярного выражения e. например,

for f in *; do if [[ $f =~ \.a$ ]]; then echo "$f"; fi; done

или (более компактно)

for f in *; do [[ $f =~ \.a$ ]] && echo "$f"; done

хотя в данном случае это излишество.

1
20.03.2019, 14:24
1 ответ

Исследуем эту строку:

usep=$(awk '{ if($1 > 60) print $0 }' $HOME/DBA/monitor/diskcheck.log | cut -d'%' -f1)

В этом случае $0 имеет значение 66 65 85 66. Таким образом, команда cut -d'%' не может найти разделитель % в таком значении и возвращает его как есть.

Должно быть:

usep=$(awk '{ if($1 > 60) print $1 }' $HOME/DBA/monitor/diskcheck.log

где $1 указывает на первое поле


То же верно и для строки:

usep1=$(awk '{ if($1 > 60) print $0 }' $HOME/DBA/monitor/log/disk_alert.log | cut -d'%' -f1)
1
27.01.2020, 23:45

Теги

Похожие вопросы