Using gawk to Get PT Unassigned Trips Output into a Matrix
July 15th, 2011In the process of quality-control checking a transit on-board survey, one task that has been routinely mentioned on things like TMIP webinars is to assign your transit trip-table from your transit on-board survey. Â This serves two purposes – to check the survey and to check the transit network.
PT (and TranPlan’s LOAD TRANSIT NETWORK, and probably TRNBUILD, too) will attempt to assign all trips. Â Trips that are not assigned are output into the print file. Â In PT (what this post will focus on), will output a line similar to this:
W(742): 1 Trips for I=211 to J=277, but no path for UserClass 1.
When a transit path is not found. Â With a transit on-board survey, there may be a lot of these. Â Therefore, less time spent writing code to parse them, the better.
To get this to a file that is easier to parse, start with your transit script, and add the following line near the top:
GLOBAL PAGEHEIGHT=32767
This removes the page headers. I had originally tried this with page headers in the print file, but it created problems. Really, you probably won’t print this anyway, so removing the page headers is probably a Godsend to you!
Then, open a command line, and type the following:
gawk '/(W\(742\).*)\./ {print $2,$5,$7}' TCPTR00A.PRN >UnassignedTransitTrips.PRN
Note that TCPTR00A.PRN is the transit assignment step print file, and UnassignedTransitTrips.PRN is the destination file. The {print $2,$5,$7} tells gawk to print the second, fifth, and seventh columns. Gawk figures out the columns itself based on spaces in the lines. The >UnassignedTransitTrips.PRN directs the output to that file, instead of listing it on the screen.
The UnassignedTransitTrips.PRN file should include something like:
1 I=3 J=285,
1 I=3 J=289,
1 I=3 J=292,
1 I=6 J=227,
1 I=7 J=1275,
The first column is the number of unassigned trips, the second column is the I zone, and the last column is the J zone.
This file can then be brought into two Matrix steps to move it to a matrix. The first step should include the following code:
RUN PGM=MATRIX PRNFILE="S:\USER\ROHNE\PROJECTS\TRANSIT OB SURVEY\TRAVELMODEL\MODEL\TCMAT00A.PRN" FILEO RECO[1] = "S:\User\Rohne\Projects\Transit OB Survey\TravelModel\Model\Outputs\UnassignedAM.DBF", FIELDS=IZ,JZ,V FILEI RECI = "S:\User\Rohne\Projects\Transit OB Survey\TravelModel\Model\UnassignedTransitTrips.PRN" RO.V=RECI.NFIELD[1] RO.IZ=SUBSTR(RECI.CFIELD[2],3,STRLEN(RECI.CFIELD[2])-2) RO.JZ=SUBSTR(RECI.CFIELD[3],3,STRLEN(RECI.CFIELD[3])-2) WRITE RECO=1 ENDRUN
This first step parses the I=, J=, and comma out of the file and inserts the I, J, and number of trips into a DBF file. This is naturally sorted by I then J because of the way PT works and because I am only using one user class in this case.
The second Matrix step is below:
RUN PGM=MATRIX FILEO MATO[1] = "S:\User\Rohne\Projects\Transit OB Survey\TravelModel\Model\Outputs\UnassignedAM.MAT" MO=1 FILEI MATI[1] = "S:\User\Rohne\Projects\Transit OB Survey\TravelModel\Model\Outputs\UnassignedAM.DBF" PATTERN=IJM:V FIELDS=IZ,JZ,0,V PAR ZONES=2425 MW[1]=MI.1.1 ENDRUN
This step simply reads the DBF file and puts it into a matrix.
At this point, you can easily draw desire lines to show the unassigned survey trips. Hopefully it looks better than mine!
You must be logged in to post a comment.