Вы, вероятно, используете dnsmasq
, попробуйте запустить
ps -ef | grep dnsmasq
Это должно дать вам файл конфигурации для используемого dnsmasq, затем просто посмотрите в него и посмотрите, какие DNS используются в качестве переадресации для dnsmasq
.
Общий подход:
$ awk '{ count[$2]++ }
END {
for (name in count)
printf("%s signed %d time(s)\n", name, count[name])
}' <file
Harold signed 1 time(s)
Dan signed 1 time(s)
Sebastian signed 1 time(s)
Suzie signed 4 time(s)
Jordan signed 2 time(s)
Suzan signed 1 time(s)
Т. е. использовать ассоциативный массив/хэш для хранения количества просмотров определенного имени. В блоке END
переберите все имена и распечатайте сводку для каждого.
Для более удобного форматирования измените заполнитель %s
в вызове printf()
на что-то вроде %-10s
, чтобы зарезервировать 10 символов для имен (по левому краю -по ширине ).
$ awk '{ count[$2]++ }
END {
for (name in count)
printf("%-10s signed %d time(s)\n", name, count[name])
}' <file
Harold signed 1 time(s)
Dan signed 1 time(s)
Sebastian signed 1 time(s)
Suzie signed 4 time(s)
Jordan signed 2 time(s)
Suzan signed 1 time(s)
Больше возни с выводом (, потому что мне скучно):
$ awk '{ count[$2]++ }
END {
for (name in count)
printf("%-10s signed %d time%s\n", name, count[name],
count[name] > 1 ? "s" : "" )
}' <file
Harold signed 1 time
Dan signed 1 time
Sebastian signed 1 time
Suzie signed 4 times
Jordan signed 2 times
Suzan signed 1 time
Это задание для awk
. Для этого вам понадобится array[index]
:
awk 'NF {name[$2]++} END{for (each in name) {print each " signed " name[each] " time(s)"}}' file
Jordan signed 2 time(s)
Dan signed 1 time(s)
Suzie signed 4 time(s)
Suzan signed 1 time(s)
Sebastian signed 1 time(s)
Harold signed 1 time(s)
NF
— удалить лишние пустые строки. Данные хранятся в индексе и значении массива. Значения указываются с соответствующим индексом.
Без форматирования самое простое решение
sort|uniq -c
uniq -c
подсчитывает строки и ставит перед ними префикс их количества, сортировка необходима для работы uniq.
$ sort|uniq -c
asdf
asdf
qwer
[ctrl-d]
2 asdf
1 qwer
Ваше форматирование может быть выполнено с помощью sed или awk, если вам нужен именно этот формат:
awk '{print $2}'|sort|uniq -c|awk '{print($2, "signed",$1, "time(s)")}'
Я попробовал решение «для», хотя уверен, что его можно -отредактировать и сделать модным. Хотя служит цели.
for name in $(awk '{print $2}' x.txt)
do
count=$(grep -i $i x.txt|wc -l)
echo "$i signed in $count times" >>xy.txt
done
sort -u xy.txt
Dan signed in 3 times
Harold signed in 1 times
Jordan signed in 2 times
Sebastian signed in 1 times
Suzan signed in 1 times
Suzie signed in 4 times
Хотя awk
использует связанный массив и это будет ограничено размером имеющейся у вас памяти, вместо этого вы можете сделать следующее:
sort -k2,2 infile | uniq -c
Либо делать форматирование как хотите:
sort -k2,2 infile |uniq -c |awk '{ print $3, "signed", $1, "time(s)" }'