1

我有一个配置文件,其中包含各种设备的条目,每个条目由空行分隔。我需要在文件中搜索给定设备类型的所有实例,并计算出现后的非空行数,在第一个空白处停止。

例如:

服务器=foo
配置第 1
行 配置第 2
行 配置第 3 行

服务器=bar
配置行 1
配置行 2

服务器=foo
配置第 1 行

如果我想知道总共有多少“配置行”与服务器“foo”相关联,我应该得到四个。你能帮忙吗?

我在 AIX 5.3 上。它没有 pcregrep。:( Grep、sed 和 awk 都是我可以访问的。

4

1 回答 1

2

这个简单的 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=//'
于 2010-08-06T13:31:25.423 回答