#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my %lut; my $cur; my %rev_lut; while() { chomp; $cur = $1 if /(Gruppe\d+)/; push @{$lut{$cur}}, $_ unless (/Gruppe/ or /^\s*$/); } print Dumper \%lut; while (my ($k, $v) = each %lut) { push @{$rev_lut{$_}}, $k for @$v; } print Dumper \%rev_lut; _ _DATA_ _ Gruppe1 PC1 PC2 PC3 Gruppe2 PC2 PC4 PC5 Gruppe3 PC1 PC6