Какая часть Вашего веб-сервера даже делает поиски DNS? Большинство конфигураций веб-сервера явно отключает обратный поиск DNS каждого входящего пользователя для скорости (потому что DNS является медленным в целом).
Как Patrick отмечает, nscd делает правильную вещь и уважает положительные значения TTL. Да, Вы могли переопределить его (unbound
позволил бы Вам сделать это легко, просто изменить server.cache-min-ttl
, имеет предупреждения об увеличении его вне 1 часа по тем же причинам). ОДНАКО Ваши запросы, вероятно, главным образом rDNS, который будет иметь тенденцию иметь дольше TTLs в целом.
Кроме того, начиная с Вашего maximum number of cached values
является настолько низким, я хотел бы отметить, что Вы едва получаете любой трафик.
Если Вы действительно заботитесь о том, где Вы, которых пользователи часто повторяют от того, я предложил бы регистрировать его снаружи nscd и не вызвать беспокойство о нем больше.
Редактирование (2013/12//09): nscd -g
статистика хостов от dev.gentoo.org
(никакие блоки в комментариях):
nscd configuration:
4h 8m 43s server runtime
hosts cache:
yes cache is enabled
no cache is persistent
no cache is shared
422 suggested size
1108744 total data pool size
966632 used data pool size
600 seconds time to live for positive entries
20 seconds time to live for negative entries
67878 cache hits on positive entries
2479 cache hits on negative entries
9464 cache misses on positive entries
4276 cache misses on negative entries
83% cache hit rate
6951 current number of cached values
7641 maximum number of cached values
33 maximum chain length searched
1 number of delays on rdlock
0 number of delays on wrlock
0 memory allocations failed
yes check /etc/hosts for changes
awk '
BEGIN {
fmt="%-15s%-10s%-10s%-10s%-10s%-10s\n"
printf fmt,"Name","Age","Sex","Weight","Home","Phone"
print "---------"
}
{
v=$0
sub(/[^:]*: /, "", v)
a[$1]=v
}
/Phone/ {
printf fmt,a["NAME:"],a["Age:"],a["Sex:"],a["Weight:"],a["Home"],a["Phone"]
delete a
}
END{
print "---------\nFile Complete"
}' file*
Использование двойных табуляций между столбцами проблематично. Если есть, скажем, и длинные, и короткие имена, тогда столбцы могут оказаться в неправильных местах.Выше я отформатировал столбцы заданной ширины. Возможно, вам придется отрегулировать ширину для достижения наилучших результатов.
Обратите внимание, что FS = ":"
также может вызвать проблемы. Поля могут содержать двоеточия, что сбивает счетчик.Этого можно избежать, разбив информацию в первом двоеточии, как указано ниже. Эти операторы записывают всю информацию о файле в массив a
:
v=$0
sub(/[^:]*: /, "", v)
a[$1]=v
Первое поле - это ключ. Все, что находится после первого двоеточия, является значением.
Одна команда awk может обработать множество файлов. Как и выше, обрабатываются все файлы, соответствующие файлу glob *
. Замените его любым глобусом, который соответствует вашим файлам данных.
Вышеупомянутое обрабатывает одного человека за раз. Это означает, что этот код не требует большой памяти и, следовательно, подходит для больших наборов данных.
$ bash script.sh
Name Age Sex Weight Home Phone
---------
Matty Nigan 65 M XX XXXXX XXX XXX XXXX
---------
File Complete
Кроме того, похоже, что оператор, начинающийся с "{print $ 2 ...", будет выполняться для каждой входной записи. Лучше включить печать в фигурные скобки после селектора / PHONE: /. Кроме того, если бы я делал это, я бы поместил часть BEGIN в начало программы, а не встраивал бы ее дальше вниз, как есть.
Как отмечалось в предыдущем комментарии, в отпечатке следует указывать имя, возраст, пол и т. Д., А не 2, 3, 4 доллара и т. Д.
Я считаю, что / PHONE: / {phone = $ 3} даст ты проблема. Как видно из примеров данных, три группы цифр телефонного номера, разделенные пробелами, будут отображаться как $ 3 $ 4 $ 5. Таким образом, чтобы собрать весь номер телефона, более подходящим вариантом будет / PHONE: / {phone = $ 3 "-" 4 доллара США "-" 5 долларов США}.
Попробуйте использовать лук, построенный так, как показано ниже. Построит массив с деталями и распечатает лот в конце.
awk -F: '
/^NAME/{name[c]=$2}
/^Age:/{age[c]=$2}
/^Sex:/{sex[c]=$2}
/^Weight:/{weight[c]=$2}
/^Home address:/{home[c]=$2}
/^Phone number:/{phone[c]=$2;c++}
END {
print "NAME AGE SEX Weight HOME Phone"
print "==========="
for(x in name) {
printf "%-10s %3d %s %s %s %s\n",
substr(name[x],2),
age[x],
sex[x],
weight[x],
home[x],
phone[x]
}
}'