我有一个配置文件,其中包含各种设备的条目,每个条目由空行分隔。我需要在文件中搜索给定设备类型的所有实例,并计算出现后的非空行数,在第一个空白处停止。
例如:
服务器=foo
配置第 1
行 配置第 2
行 配置第 3 行服务器=bar
配置行 1
配置行 2服务器=foo
配置第 1 行
如果我想知道总共有多少“配置行”与服务器“foo”相关联,我应该得到四个。你能帮忙吗?
我在 AIX 5.3 上。它没有 pcregrep。:( Grep、sed 和 awk 都是我可以访问的。
这个简单的 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=//'