...
The bufr_filter processes sequentially all bufr messages contained in the input files and applies the rules to each one of them. Input messages can be written to the output by using the "write" statement. The write statement can be parameterised so that output is sent to multiple files depending on key values used in the output file name.
Header information can be accessed witout unpacking the data. This rules_file:
will result in the the follwing output:Code Block print "[bufrHeaderCentre] [bufrHeaderSubCentre] [masterTablesVersionNumber] [localTablesVersionNumber] [numberOfSubsets]";
Code Block > bufr_filter rules_file ../data/bufr/syno_multi.bufr 98 0 13 1 1 98 0 13 1 1 98 0 13 1 1
To print values from the data section the messages have to be unpacked. This rules_file:
will print out some data values from the specified SYNOP BUFR messages.Code Block set unpack=1; print "block=[blockNumber] station=[stationNumber] lat=[latitude] lon=[longitude] t2=[airTemperatureAt2M]";
Code Block > bufr_filter rules_file ../data/bufr/syno_multi.bufr block=1 station=1 lat=70.93 lon=-8.67 t2=274.5 block=1 station=3 lat=77 lon=15.5 t2=268.4 block=1 station=7 lat=78.92 lon=11.93 t2=268.5
The bufr_filter allows defining new keys with the transient keyword. We will further develop the previous example by creating a new key to combinethe combine the block number and the station number into the full WMO station id:
The result is:Code Block set unpack=1; transient statid=1000*blockNumber+stationNumber; print "statid=[statid] lat=[latitude] lon=[longitude] t2=[airTemperatureAt2M]";
Code Block > bufr_filter rules_file ../data/bufr/syno_multi.bufr block=1 station=1statid=1001 lat=70.93 lon=-8.67 t2=274.5 blockstatid=11003 station=3 lat=77 lon=15.5 t2=268.4 block=1 station=7statid=1007 lat=78.92 lon=11.93 t2=268.5
To access the attributes belonging to the keys use the -> operator. The example below prints the attributes of key "pressure" from a SYNOP BUFR message.
The result is:Code Block print "pressure=[pressure] [pressure->units]"; print "pressure->code=[pressure->code!06d]"; print "pressure->scale=[pressure->scale]"; print "pressure->reference=[pressure->reference]"; print "pressure->width=[pressure->width]"; print "pressure->percentConfidence=[pressure->percentConfidence] [pressure->percentConfidence->units]"; print "pressure->percentConfidence->code=[pressure->percentConfidence->code!06d]"; print "pressure->percentConfidence->scale=[pressure->percentConfidence->scale]"; print "pressure->percentConfidence->reference=[pressure->percentConfidence->reference]"; print "pressure->percentConfidence->width=[pressure->percentConfidence->width]";
Code Block > bufr_filter rules_file ../data/bufr/syno_1.bufr pressure=100910 Pa pressure->code=010004 pressure->scale=-1 pressure->reference=0 pressure->width=14 pressure->percentConfidence=74 % pressure->percentConfidence->code=033007 pressure->percentConfidence->scale=0 pressure->percentConfidence->reference=0 pressure->percentConfidence->width=7