entries_expand_apts.awk (639B)
1 #!/bin/awk 2 function date_to_number(s){ 3 return sprintf( "%s%s%s", substr(s,7,4), substr(s,1,2), substr(s,4,2) ) 4 } 5 function number_to_date(s){ 6 return sprintf( "%s/%s/%s", substr(s,5,2), substr(s,7,2), substr(s,1,4) ) 7 } 8 { 9 # If not apt, skip to next record 10 if ( substr($0, 12, 1) != "@" ){ print $0; next } 11 12 # If apt range days match, skip and go to next 13 d1 = substr($0,1,10) 14 d2 = substr($0,23,10) 15 if (d1 == d2) { print $0; next } 16 17 d1 = date_to_number(d1) 18 d2 = date_to_number(d2) 19 day_total = d2 - d1 + 1 20 sub(/<[[:digit:]]+$/, "( "day_total" day apt ) &", $0) 21 22 for (i=d1; i<=d2; i++){ 23 print number_to_date(i), substr($0,12) 24 } 25 }