【发布时间】:2019-12-26 06:00:10
【问题描述】:
我有一个包含节点列表的文件 (node_list.txt)。
nod_1
nod_2
nod_3
nod_4
nod_5
我有主机 IP 地址列表(这个计数可能会有所不同),需要将 node_list 分成相等数量的部分,并将这些拆分的节点文件发送到每个主机。 host_ip1 host_ip2 host_ip3
文件中节点的划分基于可用的 host_ip 数量。
在我的示例中,我应该得到:
node_list_file_1.txt
nod_1
nod_2
node_list_file_2.txt
nod_3
nod_4
node_list_file_3.txt
nod_5
我的代码如下所示:
print Dumper(\@list_of_hosts);
my $node_file = "node_list.txt";
open(NODE_FILE, "< $node_file") or die "can't open $node_file: $!";
my $count;
$count += tr/\n/\n/ while sysread(NODE_FILE, $_, 2 ** 16);
print "COUNT:$count\n";
my $res = $count / scalar @list_of_ips;
在$res 我正在计算每个文件应该有多少行。但是如何将其放入文件中。
【问题讨论】:
-
打开输出文件,将句柄存储在一个数组中。单步执行输入文件,根据数组将每一行写入适当的文件。继续,直到完成。请注意,您不需要知道输入文件有多大(它包含多少行);你只需要知道你想要多少个输出文件。
-
另外,您应该避免使用老式的
NODE_FILE文件句柄样式并使用词法范围的文件句柄:open my $fh, "<", $node_file or die; -
要检查当要写入的文件数不均分行数时需要做什么:对于 10 行分成 3 个文件,您是否需要每个文件的行数为 4-4-2 或4-3-3 ?
-
@zdim,或者换一种说法,如果有 5 台主机和 26 个节点,是 6-5-5-5-5 还是 6-6-6-6-2? (就个人而言,我不知道后者如何接近 OP 要求的“平等”。但我现在会给你怀疑的好处)
-
@ikegami 是的,一个更好的例子。虽然他们确实说“零件数量相等”(我一开始错过了),但这对于规范来说有点薄,所以我要求确认。