我需要计算匹配配置文件条目的行数,最好使用“grep”;

发布于 2024-08-31 22:12:16 字数 362 浏览 8 评论 0原文

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

例如:

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

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

服务器=foo
配置行 1

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

我使用的是 AIX 5.3。它没有 pcregrep。 :( 我只能使用 Grep、sed 和 awk。

I have a configuration file that has entries for various devices, with each entry separated by a blank line. I need to search the file for all instances of a given device type, and count the number of non-blank lines following the occurrence, stopping at the first blank.

For example:

Server=foo
config line 1
config line 2
config line 3

Server=bar
config line 1
config line 2

Server=foo
config line 1

If I wanted to know how many total "config lines" were associated with server "foo", I should get four. Can you please help?

I am on AIX 5.3. It doesn't have pcregrep. :( Grep, sed, and awk are all I have access to.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

云淡月浅 2024-09-07 22:12:17

这个简单的 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=//'

This simple awk script will tell you information you need:

#!/usr/bin/awk -f    

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

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

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

You may need to adjust /usr/bin/awk path to match yours. If you place this code in counter script, it and invoke it like this:

./counter < config

It will output following for your example config:

Server=foo 4
Server=bar 2

If you need to get rid of Server= at the beginning of lines, you can pipe it through sed:

./counter < config | sed 's/^Server=//'
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文