bash :установить значение из журнала в качестве переменной

Соответствующая часть /proc/mdstatвыглядит так, как показано ниже, где Uозначает устройство, находящееся в состоянии «включено», а _устройство, находящееся в состоянии «внизу». Когда он восстанавливается, устройства отображаются как «неработающие», поэтому мы можем подождать, пока все устройства снова не «включятся».

md0 : active raid5 sda1[0] sdd1[2] sdb1[1]
     1465151808 blocks level 5, 64k chunk, algorithm 2 [4/3] [UUU_]

Вот примерно так:

dev=md0
until grep -A1 "^$dev :" /proc/mdstat | grep -q '\[UU*\]' ; do
    sleep 2
done 
run some command here...

(Первый grepищет заданное имя устройства, а grep -A1печатает соответствующую строку плюс еще одну после. Второй ищет строку Uмежду скобками.)

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

2
17.12.2020, 16:56
1 ответ

Использование awk:

awk '{sum+=$1}END{print sum/NR}' file.log

Чтобы сохранить его в переменной bash, используйте подстановку команд:

variable=$(awk '{sum+=$1}END{print sum/NR}' file.log)

Чтобы изменить точность, вы можете использоватьprintf:

variable=$(awk '{sum+=$1}END{printf "%.1f", sum/NR}' file.log)
7
18.03.2021, 22:42

Теги

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