我遇到了一个非常复杂的问题(从我作为新手的角度来看),我不知道如何解决它。我能想到工作流程,但不能想到脚本。
我的文件 A 如下所示:Teacher (tab) Student1(space)Student2(space)..
Fiona Nicole Sherry
James Alan Nicole
Michelle Crystal
Racheal Bobby Dan Nicole
当有两个同名(例如,John1、John2)时,他们有时会在他们的名字旁边有数字。如果他们有两个以上的顾问,学生也可能重叠。
文件 B 是一个将教师组放在一起的文件。它看起来很相似,但值是用逗号分隔的。
Fiona Racheal,Jack
Michelle Racheal
Racheal Fiona,Michelle
Jack Fiona
文件 B 的趋势是一个键有多个值,每个值也成为一个键,以便轻松找到谁与谁分组。
我想要的输出是哪些学生可能会根据他们的老师/小组接受类似的教育。所以我希望脚本执行以下操作:
- 将文件 A 存储到哈希中并关闭
打开文件B,查看每个老师是否有学生(有的可能没有,实际名单很大..)。所以如果我带第一个老师,Fiona,它会在存储的文件中查找一个哈希表,看看是否有一个 Fiona。如果有(在本例中为 Nicole 和 Sherry),将它们分别作为新哈希表的新键弹出。
while (<Group>) { chomp; $data=$_; $data=~/^(\S+)\s+(.*)$/; $TeacherA=$1; $group=$2;
然后,看看与Fiona(Racheal,Jack)分组的教师组。一次带 1 人 (Racheal)
if (defined??) { while ($list=~/(\w+)(.*)/) { $TeacherB=$1; $group=$2;
- 查看 Racheal 学生的文件 A。
- 将它们填充为步骤 2 中生成的学生键的值(逗号分隔)。
打印学生-学生和教师-教师组。
Nicole Bobby,Dan,Nicole Fiona Racheal Sherry Bobby,Dan,Nicole Fiona Racheal
由于 Fiona 小组的下一任老师 Jack 没有学生,所以他不会出现在这个结果中。例如,如果他有大卫,结果将是:
Nicole Bobby,Dan,Nicole Fiona Racheal Sherry Bobby,Dan,Nicole Fiona Racheal Nicole David Fiona Jack Sherry David Fiona Jack
我很抱歉问了这么一个复杂而具体的问题。我希望其他正在做类似事情的人可以从答案中受益。非常感谢您的帮助和回复。你是我唯一的帮助来源。