Bash 组相似的主机名并添加计数器
所以,我有一个问题,我不知道如何解决它 我有一个类似的主机名列表,但有细微的差异。例如:Bash 组相似的主机名并添加计数器,bash,scripting,Bash,Scripting,所以,我有一个问题,我不知道如何解决它 我有一个类似的主机名列表,但有细微的差异。例如: hostname1000 hostname1001 hostname1002 hostname1003 hostname1004 hostname2000 hostname2001 hostname2002 我想将这些主机名分组如下: hostname[1000-1004,2000-2002] 这将用于pdsh 我尝试了以下方法,但它只是在文件名的末尾添加了一个计数,并且没有按每个主机
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
任何想法都会有帮助:)
谢谢!
Joe所以我也在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]
谢谢!
Joe所以我也在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]
谢谢!
乔