У меня очень мало опыта работы со скриптами bash (это первый, который я пишу, так что ...), но я хотел бы написать скрипт, который проходит через файл журнала (который, конечно, заполняется каждый раз минуты) и ищет определенную фразу (в моем случае это Task x_1 is running
).
Если эта фраза найдена, то запускается команда top
(ее результаты фильтруются), ее результаты записываются в отдельный файл (который каждый раз отличается - имя состоит из идентификатора x_1
и текущей даты).
Результаты команды top
записываются до тех пор, пока не будет найдена фраза Task x_1 is completed
.
В идеале, он должен начать поиск Task x_2 is running
снова, пока не будут найдены все x. x_1
, x_2
, ..., x_n
- это идентификаторы процессов, я храню их в отдельном файле (list.txt, который состоит из идентификаторов, записанных в отдельных строках).
IFS=$'\n\r' read -d '\r' -r -a mylist < list.txt
echo ${mylist[1]}
NOW=$(date +"%m-%d-%y")
echo $NOW
for i in "${mylist[@]}"; do
touch "log_${i}_$NOW.txt"
if grep "Task ${i} is running" Log.log; then
grep "Task ${i} is running" Log.log > "log_${i}_$NOW.txt"
while grep -v "Task ${i} is completed" Log.log; do
top -b | grep "Process Name" > "log_${i}_$NOW.txt"
done
grep "Task ${i} is completed" Log.log > "log4_${i}_$NOW.txt"
fi
done
Ну, это не работает (очевидно). Мой главный вопрос - можно ли вообще выполнять команду top
и фильтровать файл Log.log одновременно? Может быть, есть простая команда, чтобы сделать то же самое, что я пытаюсь достичь с помощью ifs и loop? Если нет - как мой текущий «скрипт» можно исправить для достижения ожидаемого результата?
Любая помощь будет оценена!