aboutsummaryrefslogtreecommitdiff
path: root/Carpet/CarpetIOScalar/src/util/mergeCarpetIOScalar.pl
diff options
context:
space:
mode:
Diffstat (limited to 'Carpet/CarpetIOScalar/src/util/mergeCarpetIOScalar.pl')
-rwxr-xr-xCarpet/CarpetIOScalar/src/util/mergeCarpetIOScalar.pl72
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);
}