#!/usr/bin/perl use strict; use warnings; my %data; my $cur_tag; open (FILE, '<', $ARGV[0]) or die "Could not open file: $!"; while () { chomp; if ( my ($tag,$line) = /^(X\S+)\s+(.+)$/ ) { $data{$tag} .= "\n" if exists $data{$tag}; $data{$tag} .= $line; $cur_tag = $tag; } elsif ($cur_tag && !/^BEGIN_TAG/) { $data{$cur_tag} .= " NEWLINE ".$_; } } for my $tag (sort keys %data) { print "$tag: $data{$tag}\n"; } #### BEGIN_TAG X1 test test test X2 no no no no X3 yes yes yes BEGIN_TAG X1 test test test tes test test X2 no no no no no nono non no no nononono no no no X3 hi hi hi hi hi hi hi hi hi hi hi hi #### X1: test test test test test test NEWLINE tes test test X2: no no no no no no no no no NEWLINE nono non no no NEWLINE nononono no no no X3: yes yes yes hi hi hi hi hi hi NEWLINE hi hi hi hi NEWLINE hi hi