msgReader examples
msgReader examples include:
-
msgExtract bnd01ms4_in.tin.msg | grep 'TEST\^' | msgReader
In this example, you first msgExtract the messages so that you can grep out
TEST
messages, asgrep
operates on newlines.The results are then piped to msgReader.
Message: 1 MSH|^~\&|MS4OC|100|CERNER|100|20080905060049||ORR^O02|00000000001786872|T|2.3 MSA|AA| PID|1|000700228|444756||TEST^MCKESSON^^^||19451004|F||W|9000 PHARMACY ROAD^^LANDLOW^MO^65214^^^||||| ORC|NA|00010|7789399237789399||IP|N|1^ONCE^^200809050600^^9||200809050600|350987^MAR||00428^PETERS^W OBR||00010|7789399237789399|0337345^POTASSIUM^^K^^|||||||||||^^^^^|00428^PETERS^WALTER^R^^^MD||||||| ZOD|01030649620001100033734523778939923778939900000000101 Message: 2 MSH|^~\&|MS4OC|100|CERNER|100|20080905061606||ORR^O02|00000000001786873|T|2.3 MSA|AA| PID|1|000647254|444635||TEST^TERESA^X^^||19720716|F||W|123 ANY STREET^^SAINT PETERS^MO^63376^^^ST CH ORC|NA|00003|7789284237789284||IP|N|1^ONCE^^200809050715^^9||200809050615|350987^MAR||00431^SEE^WILL OBR||00003|7789284237789284|0383224^TROPONIN T-QUANTITATIVE^^TROPT^^|||||||||||^^^^^|00431^SEE^WILLI ZOD|01030650710001100038322423778928423778928400000000101 Message: 3 MSH|^~\&|MS4ADT|100|CLOVERLEAF|100|20080905085815||ADT^A28|00000000001786887|P|2.3 EVN|A28|20080905085812|||BOMS4TEST PID|1|000740037|445977||HORIZON^TEST^^^||19540504|M||W|SOMEWHERE STREET^^COLUMBIA^MO^65201^^^BOONE|B GT1|1|000740037|HORIZON^TEST^^^|^^^^|SOMEWHERE STREET^^COLUMBIA^MO^65201^^^BOONE|||19540504|M||A|993
-
msgReader bnd01ms4_in.tin.msg | grep PID
Result:
PID|1|000700228|444756||TEST^MCKESSON^^^||19451004|F||W|9000 PHARMACY ROAD^^LANDLOW^MO^65214^^^||||| PID|1|000647254|444635||TEST^TERESA^X^^||19720716|F||W|123 ANY STREET^^SAINT PETERS^MO^63376^^^ST CH PID|1|000740037|445977||HORIZON^TEST^^^||19540504|M||W|SOMEWHERE STREET^^COLUMBIA^MO^65201^^^BOONE|B PID|1|000740037|445977||HORIZON^TEST^^^||19540504|M||W|SOMEWHERE STREET^^COLUMBIA^MO^65201^^^BOONE|B PID|1|000740037|445977||HORIZON^TEST^^^||19540504|M||W|SOMEWHERE STREET^^COLUMBIA^MO^65201^^^BOONE|B PID|1|000740037|445977||HORIZON^TEST^^^||19540504|M||W|SOMEWHERE STREET^^COLUMBIA^MO^65201^^^BOONE|B PID|1|000740037|445977||HORIZON^TEST^^^||19540504|M||W|SOMEWHERE STREET^^COLUMBIA^MO^65201^^^BOONE|B PID|1|000740037|445977||HORIZON^TEST^^^||19540504|M||W|SOMEWHERE STREET^^COLUMBIA^MO^65201^^^BOONE|B PID|1|000700228|444756||TEST^MCKESSON^^^||19451004|F||W|9000 PHARMACY ROAD^^LANDLOW^MO^65214^^^|||||
-
msgReader bnd01ms4_in.tin.msg | egrep 'Message|ZIP'
This shows the message # and the ZIP segments. You can use egrep to narrow down the search.
Message: 1 Message: 2 Message: 3 Message: 4 Message: 5 ZIP|10.128.18.166|BOMS4TEST|PHRE010|~~~| Message: 6 ZIP|10.128.18.166|BOMS4TEST|HSRE019HL7|~~~| Message: 7 ZIP|10.128.18.166|BOMS4TEST|PHRE010|~~~| Message: 8 ZIP|10.128.18.166|BOMS4TEST|HSRE019HL7|~~~| Message: 9 msgReader -w 70 bnd01ms4_in.tin.msg
- This example demonstrates the
-w
wrapping argument. You can set any number. When setting the wrapping and then piping to grep,grep
does not only show the matching lines, as in this example:Message: 1 MSH|^~\&|MS4OC|100|CERNER|100|20080905060049||ORR^O02|000000000017868 72|T|2.3 MSA|AA| PID|1|000700228|444756||TEST^MCKESSON^^^||19451004|F||W|9000 PHARMACY ROAD^^LANDLOW^MO^65214^^^|||||M|UNK|00260049580|158963111 ORC|NA|00010|7789399237789399||IP|N|1^ONCE^^200809050600^^9||20080905 0600|350987^MAR||00428^PETERS^WALTER^R^^^MD| 4000 OBR||00010|7789399237789399|0337345^POTASSIUM^^K^^|||||||||||^^^^^|00 428^PETERS^WALTER^R^^^MD||||||||05000000|||1^ONCE^^200809050600^^ 9||||||||||||^^^^^ ZOD|01030649620001100033734523778939923778939900000000101 Message: 2 MSH|^~\&|MS4OC|100|CERNER|100|20080905061606||ORR^O02|000000000017868 73|T|2.3 MSA|AA| PID|1|000647254|444635||TEST^TERESA^X^^||19720716|F||W|123 ANY STREET^^SAINT PETERS^MO^63376^^^ST CHARLES|ST CHARLES||||S|NON|00260051230|999999989 ORC|NA|00003|7789284237789284||IP|N|1^ONCE^^200809050715^^9||20080905 0615|350987^MAR||00431^SEE^WILLIAM^M^^^MD| ED OBR||00003|7789284237789284|0383224^TROPONIN T-QUANTITATIVE^^TROPT^^|||||||||||^^^^^|00431^SEE^WILLIAM^M^^^MD| |||||||05000000|||1^ONCE^^200809050715^^9||||||||||||^^^^^ ZOD|01030650710001100038322423778928423778928400000000101 Message: 3 MSH|^~\&|MS4ADT|100|CLOVERLEAF|100|20080905085815||ADT^A28|0000000000 1786887|P|2.3 EVN|A28|20080905085812|||BOMS4TEST PID|1|000740037|445977||HORIZON^TEST^^^||19540504|M||W|SOMEWHERE STREET^^COLUMBIA^MO^65201^^^BOONE|BOONE||||M|UNK||993388371 GT1|1|000740037|HORIZON^TEST^^^|^^^^|SOMEWHERE STREET^^COLUMBIA^MO^65201^^^BOONE|||19540504|M||A|993388371||||||||||||||||||M||||||||Y|||UNK||||||||||||||W
-
msgReader bnd01ms4_in.tin.msg | grep MSH
Result:
MSH|^~\&|MS4OC|100|CERNER|100|20080905060049||ORR^O02|00000000001786872|T|2.3 MSH|^~\&|MS4OC|100|CERNER|100|20080905061606||ORR^O02|00000000001786873|T|2.3 MSH|^~\&|MS4ADT|100|CLOVERLEAF|100|20080905085815||ADT^A28|00000000001786887|P|2.3 MSH|^~\&|MS4ADT|100|CLOVERLEAF|100|20080905085900||ADT^A31|00000000001786888|P|2.3 MSH|^~\&|MS4ADT|100|CLOVERLEAF|100|20080905085900||ADT^A05|00000000001786889|P|2.3 MSH|^~\&|MS4ADT|100|CLOVERLEAF|100|20080905085900||ADT^A08|00000000001786890|P|2.3 MSH|^~\&|MS4ADT|100|CLOVERLEAF|100|20080905090026||ADT^A01|00000000001786891|P|2.3 MSH|^~\&|MS4ADT|100|CLOVERLEAF|100|20080905090026||ADT^A08|00000000001786892|P|2.3 MSH|^~\&|MS4OC|100|CERNER|100|20080905103736||ORR^O02|00000000001786901|T|2.3
-
msgParser
Parses a newline-delimited or a SMAT .msg file into HL7 fields.
#!/usr/bin/perl -lw ########################################################################### # # Name: msgParser # Purpose: Parse HL7 into fields # ########################################################################### # Field delimiter is carriage return for segments $/ = "\r"; $msgnum = 1; # Iterate over segments while (<>) { tr/\n//d; @fields = split '\|', $_; $name = shift @fields; exit unless $name; $name =~ tr/\x0B//d; $flag = 0; $n = 0; # Iterate over fields for (@fields) { tr/\x0D//d; tr/\x1C//d; $n++; if ($name eq "MSH") { if ($flag == 0) { print "\nMessage $msgnum\n"; print "MSH.01: |"; $flag = 1; $msgnum++ } if ($n < 9) { $msh_n = $n+1; print "$name.0$msh_n: $_" if $_; } else { $msh_n = $n+1; print "$name.$msh_n: $_" if $_; } $flag = 1; } else { if ($n < 10) { print "$name.0$n: $_" if $_; } else { print "$name.$n: $_" if $_; } } } }