aboutsummaryrefslogtreecommitdiff
path: root/Carpet/CarpetIOScalar
diff options
context:
space:
mode:
authorThomas Radke <tradke@aei.mpg.de>2006-08-15 20:02:00 +0000
committerThomas Radke <tradke@aei.mpg.de>2006-08-15 20:02:00 +0000
commite0162fb1eb4809840f97688cea009f0ce21f1752 (patch)
treea65c427013a0d0a6e54497116c65102243d93129 /Carpet/CarpetIOScalar
parentaea1a1879825c4df413394fce5b36361915f2401 (diff)
CarpetIOScalar: improved mergeCarpetIOScalar.pl script to ignore all but the last occurance of duplicate timesteps
Usage: ./mergeCarpetIOScalar.pl [-h | -help | --help] <list of files> 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). Example: ./mergeCarpetIOScalar.pl alp.norm1.asc > alp.norm1.asc.merged darcs-hash:20060815200239-776a0-4a7f68b2bcb1f23b749cd6a15da868e7a6a77c16.gz
Diffstat (limited to 'Carpet/CarpetIOScalar')
-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);
}