Group喜欢主机名并添加一个计数器

时间:2016-07-05 22:11:18

标签: bash scripting

所以,我有一个问题,我不知道如何解决它。

我有一个类似的主机名列表,但有细微的差别。例如:

 hostname1000
 hostname1001
 hostname1002
 hostname1003
 hostname1004
 hostname2000
 hostname2001
 hostname2002

我想将这些主机名分组如下:

 hostname[1000-1004,2000-2002]

这将与pdsh一起使用。

我尝试了以下操作,但它只是在文件名的末尾添加了一个计数,并且不按每个主机名的uniq计数进行分组。

 num=1;for a in $(cat range_hostname |cut -c 1-12 |sort) ; do echo ${a}${num}; num=$[num+1 ];done

任何想法都会有所帮助:)

谢谢! 乔

1 个答案:

答案 0 :(得分:0)

所以我也发布在unix.com上,这里是问题的解决方案,所以其他人可以看到:

 awk '
            {HN = $1
             sub (/[0-9]*$/, _, HN)
             sub (/^[a-z]*/, _, $1)
            }
NR == 1         {printf "%s[%04d-", HN, $1
            }
NR > 1 &&
$1+0 != LAST+1    {printf "%04d,%04d-", LAST, $1
            }
            {LAST = $1
            }
END             {printf "%04d]\n", $1
            }
' filename

filename一次包含一行主机名列表。

这也假设主机名后面有一组4位数,如

hostnmae0101
hostname0102
hostname0103 ... etc

输出

hostname[0101-0103]

谢谢! 乔