Skip to main content
deleted 10 characters in body
Source Link
jubilatious1
  • 3.9k
  • 10
  • 21
#OUTPUT A SPECIFIED 'TIME-OF-DAY' RANGE FOR ALL DATES IN FILE: ~$ raku -e 'my $hdr = get; my @a = lines.map: *.split(" "); \ my @b = do for @a { .[0..1].join("T").subst(/ (\d**2) \/ (\d**2) \/ (\d**4) /, {"$2-$0-$1"} ).DateTime, .[2..*] }; \ put $hdr; for @b { \ my $start = .[0].truncated-to("day") + Duration.new(21600); \ my $stop = .[0].truncated-to("day") + Duration.new(71408); \ put $_ if $_.[0] ~~ $start ..^ $stop };' file 
#OUTPUT A 'TIME-OF-DAY' RANGE FOR A SPECIFIED DATE IN FILE: ~$ raku -e 'my $target_date = DateTime.new("2023-03-10"); \ say $target_date; my $hdr = get; \ my @a = lines.map: *.split(" "); my @b = do for @a { .[0..1].join("T").subst(/ (\d**2) \/ (\d**2) \/ (\d**4) /, {"$2-$0-$1"} ).DateTime, .[2..*].join("\t") }; \ put $hdr; for @b { \ my $start = $target_date + Duration.new(21600); \ my $stop = $target_date + Duration.new(71408); \ put $_ if $_.[0] ~~ $start ..^ $stop };' file 
#OUTPUT A SPECIFIED 'TIME-OF-DAY' RANGE FOR ALL DATES IN FILE: ~$ raku -e 'my $hdr = get; my @a = lines.map: *.split(" "); \ my @b = do for @a { .[0..1].join("T").subst(/ (\d**2) \/ (\d**2) \/ (\d**4) /, {"$2-$0-$1"} ).DateTime, .[2..*]}; \ put $hdr; for @b { \ my $start = .[0].truncated-to("day") + Duration.new(21600); \ my $stop = .[0].truncated-to("day") + Duration.new(71408); \ put $_ if $_.[0] ~~ $start ..^ $stop };' file 
#OUTPUT A 'TIME-OF-DAY' RANGE FOR A SPECIFIED DATE IN FILE: ~$ raku -e 'my $target_date = DateTime.new("2023-03-10"); \ say $target_date; my $hdr = get; \ my @a = lines.map: *.split(" "); my @b = do for @a { .[0..1].join("T").subst(/ (\d**2) \/ (\d**2) \/ (\d**4) /, {"$2-$0-$1"} ).DateTime, .[2..*].join("\t") }; \ put $hdr; for @b { \ my $start = $target_date + Duration.new(21600); \ my $stop = $target_date + Duration.new(71408); \ put $_ if $_.[0] ~~ $start ..^ $stop };' file 
#OUTPUT A SPECIFIED 'TIME-OF-DAY' RANGE FOR ALL DATES IN FILE: ~$ raku -e 'my $hdr = get; my @a = lines.map: *.split(" "); \ my @b = do for @a { .[0..1].join("T").subst(/ (\d**2) \/ (\d**2) \/ (\d**4) /, {"$2-$0-$1"} ).DateTime, .[2..*] }; \ put $hdr; for @b { \ my $start = .[0].truncated-to("day") + Duration.new(21600); \ my $stop = .[0].truncated-to("day") + Duration.new(71408); \ put $_ if $_.[0] ~~ $start ..^ $stop };' file 
#OUTPUT A 'TIME-OF-DAY' RANGE FOR A SPECIFIED DATE IN FILE: ~$ raku -e 'my $target_date = DateTime.new("2023-03-10"); \ say $target_date; my $hdr = get; \ my @a = lines.map: *.split(" "); my @b = do for @a { .[0..1].join("T").subst(/ (\d**2) \/ (\d**2) \/ (\d**4) /, {"$2-$0-$1"} ).DateTime, .[2..*] }; \ put $hdr; for @b { \ my $start = $target_date + Duration.new(21600); \ my $stop = $target_date + Duration.new(71408); \ put $_ if $_.[0] ~~ $start ..^ $stop };' file 
Simplify `$target_date` to `DateTime.new("2023-03-10");`
Source Link
jubilatious1
  • 3.9k
  • 10
  • 21
#OUTPUT A SPECIFIED 'TIME-OF-DAY' RANGE FOR ALL DATES IN FILE: ~$ raku -e 'my $hdr = get; my @a = lines.map: *.split(" "); \ my @b = do for @a { .[0..1].join("T").subst(/ (\d**2) \/ (\d**2) \/ (\d**4) /, {"$2-$0-$1"} ).DateTime, .[2..*]}; \ put $hdr; for @b { \ my $start = .[0].truncated-to("day") + Duration.new(21600); \ my $stop = .[0].truncated-to("day") + Duration.new(7565871408); \ put $_ if $_.[0] ~~ $start ..^ $stop };' file 
#OUTPUT A 'TIME-OF-DAY' RANGE FOR A SPECIFIED DATE IN FILE: ~$ raku -e 'my $target_date = DateTime.new(date => Date.new("2023-03-10")); \ say $target_date; my $hdr = get; \ my @a = lines.map: *.split(" "); my @b = do for @a { .[0..1].join("T").subst(/ (\d**2) \/ (\d**2) \/ (\d**4) /, {"$2-$0-$1"} ).DateTime, .[2..*].join("\t") }; \ put $hdr; for @b { \ my $start = $target_date + Duration.new(21600); \ my $stop = $target_date + Duration.new(7565871408); \ put $_ if $_.[0] ~~ $start ..^ $stop };' file 
Date Time R1 R2 R3 2023-03-10T19:00:08Z 19.06 39.870 5.12 2023-03-10T19:10:08Z 18.87 39.970 4.98 2023-03-10T19:20:08Z 18.68 39.940 4.80 2023-03-10T19:30:08Z 18.84 40.110 5.01 2023-03-10T19:40:08Z 18.89 38.960 4.64 2023-03-10T19:50:08Z 18.60 39.100 4.43 2023-03-12T19:00:08Z 19.06 39.870 5.12 2023-03-12T19:10:08Z 18.87 39.970 4.98 
2023-03-10T00:00:00Z Date Time R1 R2 R3 2023-03-10T19:00:08Z 19.06 39.870 5.12 2023-03-10T19:10:08Z 18.87 39.970 4.98 2023-03-10T19:20:08Z 18.68 39.940 4.80 2023-03-10T19:30:08Z 18.84 40.110 5.01 2023-03-10T19:40:08Z 18.89 38.960 4.64 2023-03-10T19:50:08Z 18.60 39.100 4.43 
#OUTPUT A SPECIFIED 'TIME-OF-DAY' RANGE FOR ALL DATES IN FILE: ~$ raku -e 'my $hdr = get; my @a = lines.map: *.split(" "); \ my @b = do for @a { .[0..1].join("T").subst(/ (\d**2) \/ (\d**2) \/ (\d**4) /, {"$2-$0-$1"} ).DateTime, .[2..*]}; \ put $hdr; for @b { \ my $start = .[0].truncated-to("day") + Duration.new(21600); \ my $stop = .[0].truncated-to("day") + Duration.new(75658); \ put $_ if $_.[0] ~~ $start ..^ $stop };' file 
#OUTPUT A 'TIME-OF-DAY' RANGE FOR A SPECIFIED DATE IN FILE: ~$ raku -e 'my $target_date = DateTime.new(date => Date.new("2023-03-10")); \ say $target_date; my $hdr = get; \ my @a = lines.map: *.split(" "); my @b = do for @a { .[0..1].join("T").subst(/ (\d**2) \/ (\d**2) \/ (\d**4) /, {"$2-$0-$1"} ).DateTime, .[2..*].join("\t") }; \ put $hdr; for @b { \ my $start = $target_date + Duration.new(21600); \ my $stop = $target_date + Duration.new(75658); \ put $_ if $_.[0] ~~ $start ..^ $stop };' file 
Date Time R1 R2 R3 2023-03-10T19:00:08Z 19.06 39.870 5.12 2023-03-10T19:10:08Z 18.87 39.970 4.98 2023-03-10T19:20:08Z 18.68 39.940 4.80 2023-03-10T19:30:08Z 18.84 40.110 5.01 2023-03-10T19:40:08Z 18.89 38.960 4.64 2023-03-10T19:50:08Z 18.60 39.100 4.43 2023-03-12T19:00:08Z 19.06 39.870 5.12 2023-03-12T19:10:08Z 18.87 39.970 4.98 
2023-03-10T00:00:00Z Date Time R1 R2 R3 2023-03-10T19:00:08Z 19.06 39.870 5.12 2023-03-10T19:10:08Z 18.87 39.970 4.98 2023-03-10T19:20:08Z 18.68 39.940 4.80 2023-03-10T19:30:08Z 18.84 40.110 5.01 2023-03-10T19:40:08Z 18.89 38.960 4.64 2023-03-10T19:50:08Z 18.60 39.100 4.43 
#OUTPUT A SPECIFIED 'TIME-OF-DAY' RANGE FOR ALL DATES IN FILE: ~$ raku -e 'my $hdr = get; my @a = lines.map: *.split(" "); \ my @b = do for @a { .[0..1].join("T").subst(/ (\d**2) \/ (\d**2) \/ (\d**4) /, {"$2-$0-$1"} ).DateTime, .[2..*]}; \ put $hdr; for @b { \ my $start = .[0].truncated-to("day") + Duration.new(21600); \ my $stop = .[0].truncated-to("day") + Duration.new(71408); \ put $_ if $_.[0] ~~ $start ..^ $stop };' file 
#OUTPUT A 'TIME-OF-DAY' RANGE FOR A SPECIFIED DATE IN FILE: ~$ raku -e 'my $target_date = DateTime.new("2023-03-10"); \ say $target_date; my $hdr = get; \ my @a = lines.map: *.split(" "); my @b = do for @a { .[0..1].join("T").subst(/ (\d**2) \/ (\d**2) \/ (\d**4) /, {"$2-$0-$1"} ).DateTime, .[2..*].join("\t") }; \ put $hdr; for @b { \ my $start = $target_date + Duration.new(21600); \ my $stop = $target_date + Duration.new(71408); \ put $_ if $_.[0] ~~ $start ..^ $stop };' file 
Date Time R1 R2 R3 2023-03-10T19:00:08Z 19.06 39.870 5.12 2023-03-10T19:10:08Z 18.87 39.970 4.98 2023-03-10T19:20:08Z 18.68 39.940 4.80 2023-03-10T19:30:08Z 18.84 40.110 5.01 2023-03-10T19:40:08Z 18.89 38.960 4.64 2023-03-12T19:00:08Z 19.06 39.870 5.12 2023-03-12T19:10:08Z 18.87 39.970 4.98 
2023-03-10T00:00:00Z Date Time R1 R2 R3 2023-03-10T19:00:08Z 19.06 39.870 5.12 2023-03-10T19:10:08Z 18.87 39.970 4.98 2023-03-10T19:20:08Z 18.68 39.940 4.80 2023-03-10T19:30:08Z 18.84 40.110 5.01 2023-03-10T19:40:08Z 18.89 38.960 4.64 
Source Link
jubilatious1
  • 3.9k
  • 10
  • 21

Using Raku (formerly known as Perl_6)

#OUTPUT A SPECIFIED 'TIME-OF-DAY' RANGE FOR ALL DATES IN FILE: ~$ raku -e 'my $hdr = get; my @a = lines.map: *.split(" "); \ my @b = do for @a { .[0..1].join("T").subst(/ (\d**2) \/ (\d**2) \/ (\d**4) /, {"$2-$0-$1"} ).DateTime, .[2..*]}; \ put $hdr; for @b { \ my $start = .[0].truncated-to("day") + Duration.new(21600); \ my $stop = .[0].truncated-to("day") + Duration.new(75658); \ put $_ if $_.[0] ~~ $start ..^ $stop };' file 

Above (first answer) is an approach using Raku, a member of the Perl-family of programming languages. An advantage of using Raku is that ISO-8601 DateTimes are built-in. Above filters lines of input, giving output within a defined $start .. $stop range. The ..^ range operator (with caret) excludes the RHS timepoint from output.

#OUTPUT A 'TIME-OF-DAY' RANGE FOR A SPECIFIED DATE IN FILE: ~$ raku -e 'my $target_date = DateTime.new(date => Date.new("2023-03-10")); \ say $target_date; my $hdr = get; \ my @a = lines.map: *.split(" "); my @b = do for @a { .[0..1].join("T").subst(/ (\d**2) \/ (\d**2) \/ (\d**4) /, {"$2-$0-$1"} ).DateTime, .[2..*].join("\t") }; \ put $hdr; for @b { \ my $start = $target_date + Duration.new(21600); \ my $stop = $target_date + Duration.new(75658); \ put $_ if $_.[0] ~~ $start ..^ $stop };' file 

Above (second answer) somewhat more specifically you can define a $target_date and only retain a 'time-of-day' range for that Date in output.

Sample Input (OP's example plus two extra lines added at end):

Date Time R1 R2 R3 03/10/2023 19:00:08 19.06 39.870 5.12 03/10/2023 19:10:08 18.87 39.970 4.98 03/10/2023 19:20:08 18.68 39.940 4.80 03/10/2023 19:30:08 18.84 40.110 5.01 03/10/2023 19:40:08 18.89 38.960 4.64 03/10/2023 19:50:08 18.60 39.100 4.43 03/10/2023 23:30:08 18.03 34.200 2.03 03/10/2023 23:40:08 17.94 33.930 1.84 03/10/2023 23:50:08 17.87 33.840 1.74 03/11/2023 00:00:08 17.75 33.790 1.61 03/11/2023 00:10:08 17.96 34.060 1.91 03/11/2023 00:20:08 18.13 33.690 1.91 03/11/2023 00:30:08 17.91 33.620 1.68 03/12/2023 19:00:08 19.06 39.870 5.12 03/12/2023 19:10:08 18.87 39.970 4.98 

Sample Output (1):

Date Time R1 R2 R3 2023-03-10T19:00:08Z 19.06 39.870 5.12 2023-03-10T19:10:08Z 18.87 39.970 4.98 2023-03-10T19:20:08Z 18.68 39.940 4.80 2023-03-10T19:30:08Z 18.84 40.110 5.01 2023-03-10T19:40:08Z 18.89 38.960 4.64 2023-03-10T19:50:08Z 18.60 39.100 4.43 2023-03-12T19:00:08Z 19.06 39.870 5.12 2023-03-12T19:10:08Z 18.87 39.970 4.98 

Sample Output (2):

2023-03-10T00:00:00Z Date Time R1 R2 R3 2023-03-10T19:00:08Z 19.06 39.870 5.12 2023-03-10T19:10:08Z 18.87 39.970 4.98 2023-03-10T19:20:08Z 18.68 39.940 4.80 2023-03-10T19:30:08Z 18.84 40.110 5.01 2023-03-10T19:40:08Z 18.89 38.960 4.64 2023-03-10T19:50:08Z 18.60 39.100 4.43 

https://docs.raku.org/language/temporal
https://docs.raku.org/type/DateTime
https://raku.org