我有一个包含以下示例数据的输入文件。

kernel_version 主机名

2.6.32-220.el6.x86_64 www01.dc1.domain.com
2.6.32-220.el6.x86_64 www02.dc1.domain.com
2.6.32-220.el6.x86_64 exc01.dc1.domain.com
2.6.32-220.el6.x86_64 exc02.dc1.domain.com
2.6.32-120.el6.x86_64 www03.dc2.domain.com
2.6.32-120.el6.x86_64 www04.dc2.domain.com
2.6.32-120.el6.x86_64 exc03.dc2.domain.com
2.6.32-120.el6.x86_64 exc04.dc2.domain.com
2.6.32-100.el6.x86_64 www05.dc3.domain.com
2.6.32-100.el6.x86_64 www06.dc3.domain.com
2.6.32-100.el6.x86_64 exc05.dc3.domain.com
2.6.32-100.el6.x86_64 exc06.dc3.domain.com
2.6.32-220.el6.x86_64 www07.dc4.domain.com
2.6.32-220.el6.x86_64 www08.dc4.domain.com
2.6.32-220.el6.x86_64 exc07.dc4.domain.com
2.6.32-220.el6.x86_64 exc08.dc4.domain.com

我想输出唯一的内核版本,以及哪些 dcs 正在运行哪些。

例如;
2.6.32-220.el6.x86_64 dc1, dc4
2.6.32-120.el6.x86_64 dc2
2.6.32-100.el6.x86_64 dc3

实现这一目标的最佳方法是什么?

最佳答案

我会做这样的事情:

#!/usr/bin/perl
use warnings;
use strict;

my %kernels;
open INPUT,"<inputfile";

while (<INPUT>)
{
    my ($version, $hostname) = split(/\s+/,$_);
    if ($kernels{$version}) { $kernels{$version} .= ", $hostname" }
    else { $kernels{$version} = $hostname }
}
close INPUT;

# Print the summary
foreach my $kernel (keys(%kernels)) {   print "$kernel\t$kernels{$kernel}\n"; }

警告: 我没有测试这个脚本。对于可能由此代码引起的任何语法错误、竞争条件或速龙攻击,我概不负责。但它应该可以帮助您入门

编辑: 我现在已经测试过了。一个语法错误已得到纠正,没有重大的迅猛龙攻击。

关于perl - uniq 主机名的内核版本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13318023/

10-14 14:08