Я должен считать строки от соответствия записям файла конфигурации, предпочтительно с 'grep'

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

Например:

Server=foo
строка конфигурации 1
строка конфигурации 2
строка конфигурации 3

Server=bar
строка конфигурации 1
строка конфигурации 2

Server=foo
строка конфигурации 1

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

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

1
задан Jonathan Leffler 8 September 2013 в 18:39
поделиться

1 ответ

Этот простой сценарий 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=//'
2
ответ дан 3 September 2019 в 00:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: