я пытался получить rx_bytes и tx_bytes, но никакая удача, другие вещи работают.. Таким образом, можно использовать ниже сценария для того же
#!/bin/bash
# /sys/class/net/eth0/statistics/rx_bytes
# /sys/class/net/eth0/statistics/tx_bytes
Process="$1"
[[ -z $2 ]] && InterVal=1 || InterVal=$2
show_help() {
cat <<_EOF
Usage :
$0 <ProcessName> <Interval (Default 1s)>
_EOF
}
Show_Process_Stats() {
pgrep "${Process}" >/dev/null 2>&1 || { echo "Error: Process($1) it not Running.."; exit 1;};
while :
do
# timestamp(unix),cpu_activity(%),mem_usage(B),network_activity(B)
timestamp=$(date +%s)
read cpu_activty mem_usage < <( ps --no-headers -o %cpu,rssize -C "${Process}" )
echo "${timestamp}","${cpu_activty}","${mem_usage}"
sleep $InterVal
done
}
Main() {
case $1 in
""|-h|--help)
show_help
;;
*)
Show_Process_Stats
;;
esac
}
Main $*
С awk
, как и с Perl
, вам придется обернуть термины в //
, но это можно сделать:
awk '(/term1/ && /term2/) || (/term1/ && xor(/term3/, /term4/))'
Есть много способов использования GREP
с логическими операторами.
Использование
\ |
для отделения нескольких шаблонов для состояния или .
Пример: GREP 'Pattern1 \ | Pattern2' filename
Используйте опцию -E
, чтобы отправить несколько шаблонов для или
условие.
Пример: Grep -e 'Pattern1 | Pattern2' filename
Использование одного -E
соответствует только одному шаблону, но с использованием нескольких
-E
опция соответствует более одной модели.
Пример: GreeP-E-Patcher1 -E Pattern2 Имя файла
GREP -V
может моделировать работу .
Нет и оператора в GREP
, но вы можете грубить
Имитация и , используя опцию -E
.
Пример: Grep -e 'Pattern1. * Pattern2 | Pattern2. * Pattern1' Filename
Приведенный выше примером будет соответствовать всем линиям, которые содержат оба Pattern1 и Pattern2 в любом порядке.)
Вы могли бы использовать Perl:
perl -wne 'print if (/term1/ && /term2/) || (/term1/ && (/term3/ xor /term4/))'
sed '/term1/!d;/term2/b' -e '/term3/!d;/term4/d' *
Я верю, что это достигает того, что ты пытаешься сделать. Он d
вывел из скрипта любую строку, которая не соответствует
сроку1
, он b
вывел из скрипта (и таким образом автоматически распечатал) любую оставшуюся строку, которая соответствует сроку2
, и для остающихся строк он удаляет все, что не соответствует термину3
, а также из тех, которые соответствуют термину4
. Скрипты
sed
оцениваются по порядку, и все тесты являются булевыми, поэтому любые действия, полученные в результате теста, будут непосредственно влиять на поведение любых последующих действий.
Я использую цепочку grep
команд для достижения логического И:
grep expr1 filename | grep expr2
Я считаю, что это довольно просто, -похоже на Unix и элегантно.
Затем вы можете комбинировать (, как подробно объяснил @Tushi ), с опцией -E
для ИЛИ -и -v
для отрицания.
Ваш конкретный пример довольно неприятный и, вероятно, выиграет от какой-нибудь более мощной утилиты (см. ответ @muru ).