Fügen Sie einen Parameter in ein Awk-Skript ein

Fügen Sie einen Parameter in ein Awk-Skript ein

Ich habe diesen Code.Ich möchte einen Parameter hinzufügen(Name eines Flughafens)zu diesem Code. Wenn mir also der Name eines Flughafens gegeben ist, würde ich die gleiche Ausgabe erhalten, aber nur für den angegebenen Parameter.

Code:

Ermitteln Sie den Prozentsatz der verspäteten Flüge, die Gesamtzahl der verspäteten Flüge und die Gesamtzahl der Flüge für jeden Wochentag.

BEGIN { FS = OFS = "," }
FNR > 1 {
    total[$2]++; if ($6) delay[$2]++ }
END {
  print "\"weekday\"", "\"percentage_delayed\"", "\"delayed\"", "\"total_flights\""
  for (day in total) { print day, delay[day] / total[day] * 100, delay[day], total[day]}
  }

Eingang:

In Spalte 3 und 4 stehen die Namen der Flughäfen.

"DAY_OF_MONTH","DAY_OF_WEEK","ORIGIN","DEST","DEP_TIME","DEP_DEL15","CANCELLED","DIVERTED","DISTANCE"
1,Tuesday,ORD,GRB,1003,0.00,0.00,0.00,322.248
1,Tuesday,TUL,ORD,1027,0.00,0.00,0.00,1083.42
1,Tuesday,EWR,TYS,1848,0.00,0.00,0.00,1168.61

Ausgabe:

"weekday", "percentage_delayed", "delayed", "total_flights"
Tuesday,10.7912,446,4133
Moday,10.2564,336,3276
Friday,26.6401,735,2759

Wie kann ich dem Code einen Parameter hinzufügen, sodass nur die Ausgabe für den angegebenen Parameter angezeigt wird?

Danke

Antwort1

$ awk -v origin='ORD' -v dest='GRB' '
  BEGIN { FS=OFS= "," }
  FNR > 1 && $3==origin && $4==dest { total[$2]++; if ($6) delay[$2]++ }
  END {
      print "weekday", "percentage_delayed", "delayed", "total_flights"
      for (day in total) 
          print day, delay[day] / total[day] * 100, delay[day]+0, total[day]
  }' infile

Oben sind -v origin='ORD'und -v dest='GRB'als Parameter für das Awk-Skript definiert. Ändern Sie sie je nach Bedarf.

verwandte Informationen