This is ChatGPT's translation of the Perl program into AWK language. I think you can easily see the difference with Python and why I didn't go back to using AWK.
BEGIN {
# Initialize variables
startFlight = ARGV[1] ? ARGV[1] : 1
endFlight = ARGV[2] ? ARGV[2] : 9999
totalFlights = 0
totalTime = 0
totalTimePIC = 0
print "Logbook stats from flight " startFlight " to " endFlight
# Function to format time in hh:mm
function hhmm(minutes) {
hh = int(minutes / 60)
mm = minutes % 60
if (hh < 10) hh = "0" hh
if (mm < 10) mm = "0" mm
return hh ":" mm
}
# Read the flights file
while ((getline < "flights") > 0) {
split($0, fields, "\t")
flightData[fields[1]] = fields
}
# Read the gliders file
while ((getline < "gliders") > 0) {
split($0, fields, "\t")
gliderData[fields[1]] = fields
}
}
# Process each flight
{
flight = $0
flightDetails = flightData[$1] # Get flight details
if (flightDetails == "") next # If no data, skip this line
serial = flightDetails[1]
time = flightDetails[2] * 60 + flightDetails[3]
if (serial < startFlight || serial > endFlight) next
crew = flightDetails[4]
PICtime = (crew != "P2") ? time : 0
rego = flightDetails[5]
glider = gliderData[rego]
type = glider[1]
launch = flightDetails[6]
totalFlights++
totalTime += time
totalTimePIC += PICtime
# Track data by glider
byGlider[rego, "flights"]++
byGlider[rego, "time"] += time
byGlider[rego, "timePIC"] += PICtime
# Track data by glider type
byType[type, "flights"]++
byType[type, "time"] += time
byType[type, "timePIC"] += PICtime
# Track data by crew
byCrew[crew, "flights"]++
byCrew[crew, "time"] += time
# Track data by launch type
byLaunch[launch]++
}
END {
# Print data by glider
print "\n\nGlider", "Flights", " Total", " PIC"
for (glider in byGlider) {
if (byGlider[glider, "time"] > 0) {
printf "%s\t%d\t%s\t%s\n",
glider,
byGlider[glider, "flights"],
hhmm(byGlider[glider, "time"]),
hhmm(byGlider[glider, "timePIC"])
}
}
# Print data by glider type
print "\n\nGlider Type", "Flights", " Total", " PIC", "Avg"
for (type in byType) {
if (byType[type, "time"] > 0) {
avg = int(byType[type, "time"] / byType[type, "flights"] + 0.5)
printf "%-15s\t%d\t%s\t%s\t%d\n",
type,
byType[type, "flights"],
hhmm(byType[type, "time"]),
hhmm(byType[type, "timePIC"]),
avg
}
}
# Print data by crew
print "\n\nCrew", "Flights", " Time", "Avg"
for (crew in byCrew) {
avg = int(byCrew[crew, "time"] / byCrew[crew, "flights"] + 0.5)
printf "%s\t%d\t%s\t%d\n",
crew,
byCrew[crew, "flights"],
hhmm(byCrew[crew, "time"]),
avg
}
# Print data by launch type
print "\n\nLaunch", "flights"
for (launch in byLaunch) {
printf "%s\t%d\n", launch, byLaunch[launch]
}
# Print totals
print "\nTotal flights: " totalFlights
print "Total Time : " hhmm(totalTime)
print "Total PIC : " hhmm(totalTimePIC)
}