# Auswertung der PPP-Verbindungsdauern laut syslog-Protokoll des pppd # # 17.7.2006 BEGIN { ERR = "/dev/stderr" } # Beispiel-Zeile: # hot Mar 25 10:08:12 linux pppd[8172]: Connect time 42.1 minutes. /pppd.*Connect time/ { nkz = $1 conn_time = gensub(/.*Connect time ([^ ]+) minutes.*/, "\\1", "g", $0) if (conn_time != $0) { # gensub() konnte einen vernünftigen Wert herausspalten CONN_TIME[nkz] += conn_time DETAILS[nkz] = DETAILS[nkz] sprintf(" %02d. %s: %8.2f\n", $3, $2, conn_time) } else { printf("Ungültige Zeile: %s\n", $0) > ERR } } END { # Nutzerkennzeichen fallend sortieren; # für die Kommunikation mit sort nutzen wir Gawk-Koprozesse sort = "sort -r" for (nkz in CONN_TIME) { print nkz |& sort } close(sort, "to") while ((sort |& getline nkz) > 0) { printf("NKZ %s:\n Details:\n%s Summe : %8.2f\n\n", nkz, DETAILS[nkz], CONN_TIME[nkz]) } }