Существует много факторов, которые могли бы заставить часы программного обеспечения отставать или убегать. Отмечает время прихода на работу виртуальные серверы особенно подвержены целому классу этих проблем. 12 секунд в день довольно плохи, пока Вы не сталкиваетесь с виртуальными полями с часами, которые достигают на 180-200%-й скорости! Отмечает время прихода на работу ноутбуки, которые приостанавливают, может пострадать от хронометрирования проблем также.
Необходимо рассмотреть отбрасывание ntupdate
в пользу ntpd
. Имя пакета ntp
на Debian (и по-видимому Ubuntu также). Демон NTP сохраняет Ваше время в синхронизации намного больше заранее, чем задание крона, синхронизирующееся с одним или несколькими другими серверами NTP и сохраняющее Ваши часы намного более точный. Это - другая реализация того же протокола ntpdate
использование, кроме ntpd
контролирует время непрерывно.
Если Вы не хотите (очень маленькие) издержки ntpd
, Вы могли бы рассмотреть выполнение ntpdate
раз в час. Принятие Вы - 0,5 с от каждого часа, который должен быть достаточным.
Необходимо проверить grep -c
, это делает точно, что Вы описываете. При необходимости в большей гибкости Вы могли бы, вероятно, использовать awk
. Попробуйте что-то вроде этого (введенный непосредственно в браузере и не протестированные):
dir=$1
# add tests to check if $1 exists (-d) and/or is non null (-n)
find "${dir}" | awk <<\EOF
BEGIN {
pat1 = 0;
pat2 = 0;
...
}
/pattern/ { pat1 += 1;}
/otherpattern/ {pat2 += 2;}
...
END {
print "pattern", pat1;
print "otherpattern", pat2;
...
}
EOF
Я оставлю его до Вас для разработки деталей find
команда или awk
сценарий.
Следующие циклы сценария по шаблону и печати общее количество соответствий для каждого шаблона. Это ищет в соответствии с каталогом, имя которого передается как аргумент, или под текущим каталогом, если Вы не передаете аргумент.
#!/bin/sh
for p in 'Pattern 1' 'Pattern 2' 'Pattern 3; do
printf '%s = ' "$p"; grep -E -r -e "$p" "${1:-.}/data" | wc -l
done
${1:-.}
немного? Я понимаю, что это - переменная от arguement, но что делает :-
?
– karavan
16.01.2013, 18:58
$1
пусто (если никакие параметры командной строки не предоставляются), то используйте для значения .
. man bash
и быстрый поиск :-
объяснило бы это лучше всего.
– rahmu
19.01.2013, 17:08
awk
таким образом, это - совершенно новая территория. Я предполагаю, что надеялсяfor
цикл работал бы, и я не должен буду использовать что-то какawk
. – karavan 15.01.2013, 18:39for
цикл может работать. Попробуйте этоfor pat in 'pat1' 'pat2' 'pat3'; do echo $pat $(grep -E -rc "$pat" $1); done
. В зависимости от версииgrep
Вы используете, Вы, возможно, должны настроить эту команду a (крошечный) бит. Я только упомянулawk
так, чтобы Вы циклично выполнились только однажды по subdirs (в случае, если существуют слишком многие), и Вы хотите управлять выводом или добавить некоторое вычисление.awk
сценарий, который я записал, является несколько неполным, но должен дать Вам общее представление о том, как он работает. Попытайтесь считать его, я держал пари, что Вы узнаетеawk
не так твердо, как это разобрано, чтобы быть :) – rahmu 15.01.2013, 18:40awk
домашняя работа :) – karavan 15.01.2013, 19:04for
цикл от @rahmu выше не работает. Я сделал:for pat in 'text1' 'text2' 'text3'; do echo $(grep -E -rc '$pat' $1); done'
Результат - что-то вроде этого для каждого файла в каталоге (существуют тысячи): "/data/dir1/file:0". То, что я ожидаю, "text1=10, text2=20, text3=32". Мысли? – karavan 15.01.2013, 20:52