Мне нужно посчитать строки из соответствующих записей в файле конфигурации, желательно с помощью 'grep' - PullRequest
1 голос
/ 12 мая 2010

У меня есть файл конфигурации, в котором есть записи для различных устройств, каждая из которых отделена пустой строкой. Мне нужно найти в файле все экземпляры данного типа устройства и посчитать количество непустых строк после вхождения, останавливаясь на первом пробеле.

Например:

Сервер = Foo
строка конфигурации 1
Конфигурационная строка 2
строка конфигурации 3

Сервер = бар
строка конфигурации 1
строка конфигурации 2

Сервер = Foo
Конфигурационная строка 1

Если бы я хотел знать, сколько всего "строк конфигурации" было связано с сервером "foo", я должен получить четыре. Можете ли вы помочь?

Я в AIX 5.3. У него нет pcregrep. :( Grep, sed и awk - все, к чему у меня есть доступ.

1 Ответ

2 голосов
/ 06 августа 2010

Этот простой скрипт awk сообщит вам необходимую информацию:

#!/usr/bin/awk -f    

$1 ~ /^Server=/ {
    server = $1;
}

($0 != "") && ($1 !~ /^Server=/) {
    count[server] += 1
}

END {
    for (server in count) {
        print server, count[server]
    }
}

Возможно, вам потребуется скорректировать путь / usr / bin / awk, чтобы он соответствовал вашему. Если вы поместите этот код в скрипт counter, он будет вызываться так:

./counter < config

Для вашего примера конфигурации будет выведено следующее:

Server=foo 4
Server=bar 2

Если вам нужно избавиться от Server = в начале строки, вы можете передать его через sed:

./counter < config | sed 's/^Server=//'
...