Мне это подходит:
while read line
do
i=$(echo $line | cut -d\| -f1 )
f=$(echo $line | cut -d\| -f2 )
case $f in
D) sed -i /^$i/d File1.txt ;;
C) sed -i s/^$i.*/$line/ File1.txt ;;
A) echo $line >> File1.txt;;
esac
done < File2.txt
Вы можете использовать top -bn1 -U {user}
для создания файла, который затем можно будет дополнительно обработать, чтобы получить кумулятивное использование.
Аргумент -bn1
заставляет top
работать в не -интерактивном режиме, просто выводя один раз по завершении. Затем вы можете передать этот вывод куда угодно для дополнительной обработки.
например,
top -bn1 -U {user} > user_log.txt
для дополнительной обработки в другом скрипте,
или вы можете сделать что-то вроде
top -bn1 -U {user} | awk {file_processing_script} >> user_log.txt
file_processing_script
в этом случае — это скрипт awk
, который обрабатывает данные любым способом. одной из идей может быть awk 'NR>7{cpu += $9; mem += $10} END {printf "%.2f\t%.2f\n", cpu, mem}'
, который просто выводит общее использование процессора и памяти для конкретного пользователя в момент его запуска. Добавьте несколько из них вместе, и вы получите красивую таблицу, показывающую использование процессора и памяти пользователем.