diff options
Diffstat (limited to 'Carpet/CarpetIOScalar/src/util/mergeCarpetIOScalar.pl')
-rwxr-xr-x | Carpet/CarpetIOScalar/src/util/mergeCarpetIOScalar.pl | 72 |
1 files changed, 34 insertions, 38 deletions
diff --git a/Carpet/CarpetIOScalar/src/util/mergeCarpetIOScalar.pl b/Carpet/CarpetIOScalar/src/util/mergeCarpetIOScalar.pl index f174b9cae..e4680a893 100755 --- a/Carpet/CarpetIOScalar/src/util/mergeCarpetIOScalar.pl +++ b/Carpet/CarpetIOScalar/src/util/mergeCarpetIOScalar.pl @@ -12,54 +12,50 @@ #@@*/ -if (@ARGV) { - print "\n" . - " This script can be used to merge CarpetIOScalar output written\n" . - " before and after recovery.\n" . - " It reads from STDIN the contents of one or more files\n" . - " in CarpetIOScalar format and writes them to STDOUT again,\n" . - " eliminating duplicate timesteps.\n\n" . - " Example: cat alp.norm1.asc | $0 > alp.norm1.asc.merged\n\n"; - exit; +my $help = $#ARGV < 0; +for (my $arg = 0; $arg <= $#ARGV; $arg++) { + $help |= ($ARGV[$arg] eq '-h' or + $ARGV[$arg] eq '-help' or + $ARGV[$arg] eq '--help'); } +if ($help) { + print << "EOF"; -# Skalar-Variable zur Speicherung der aktuellen Zeilennummer -my $line = 0; + Usage: $0 [-h | -help | --help] <list of files> -# Rauten-Feld zur Speicherung der bereits ausgegebenen Datensaetze -my %timesteps = (); + This script can be used to merge CarpetIOScalar output written before + and after recovery. It reads one or more files in CarpetIOScalar format + and writes their contents to STDOUT, eliminating duplicate timesteps + (all but the last occurance are discarded). -# lese die naechste Zeile von der Standard-Eingabe, solange das Dateiende -# nicht erreicht ist -while (<STDIN>) { + Example: $0 alp.norm1.asc > alp.norm1.asc.merged - # aktualisiere die Zeilennummer - $line++; +EOF + exit; +} - # vergleiche die aktuelle Zeile mit dem Format fuer eine Datenzeile - if (/^(\d+) /) { +# Rauten-Feld zum Merken der Anzahl und Haeufigkeit vorhandener Datensaetze +my %timesteps = (); - # ermittle die Iterationsnummer aus der Datenzeile - my $iteration = $1; +# Liste aller Eingabe-Dateien +my @filelist = @ARGV; - # pruefe im Rauten-Feld, ob dieser Datensatz bereits ausgegeben wurde - while (defined $timesteps{$iteration}) { +# lies zeilenweise alle Eingabe-Dateien +while (<>) { - # lies alle folgenden Zeilen von der Standard-Eingabe - # bis zur Datenzeile des naechsten Datensatzes - while (<STDIN>) { - $line++; - next unless (/^(\d+) /); + # falls diese Zeile eine Datenzeile ist: + # vermerke den Datensatz mit seiner Iterationsnummer + ++$timesteps{$1} if (/^(\d+)\s/); +} - $iteration = $1; - last; - } - } +# stelle die Liste aller Eingabe-Dateien wieder her +@ARGV = @filelist; - # vermerke im Rauten-Feld, dass dieser Datensatz ausgegeben wurde - $timesteps{$iteration} = 1; - } +# lies zeilenweise alle Eingabe-Dateien +while (<>) { - # gib die aktuelle Zeile auf der Standard-Ausgabe aus - print; + # falls diese Zeile eine Datenzeile ist: + # ueberspringe alle Datensaetze mit dieser Iterationsnummer + # bis auf den letzten + print unless (/^(\d+)\s/ and --$timesteps{$1} > 0); } |