所以,我有一个问题,我不知道如何解决它。
我有一个类似的主机名列表,但有细微的差别。例如:
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
任何想法都会有所帮助:)
谢谢! 乔
答案 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]
谢谢! 乔