awk reg expression


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting awk reg expression
# 1  
Old 04-05-2011
awk reg expression

Hello,
I have thousand of messages (HL7), I want to use awk to extract only the ones that have a particular value in pv1.18
Each record in the file is the whole HL7 message, ie. when I print $0 I get the whole message MSH EVN PID etc. ,there is an x0d between the segments.
I would like to use a line somewhat like:
Code:
awk ' /PV1\|(.*\|){17}X\|/ {print $0}' filein > fileout

to get the records out in file out that only have a pv1.18 of X.
I do not seeem to get this working, I am sure I need to correct my regexp.
Anybody please help!
Thanks.

I got moving on this, this grep works :
Code:
 grep 'PV1\|\([^|]*\|\)\{16\}\|X' infile

yet this awk does not:
Code:
awk '/PV1\|\([^|]*\|\)\{16\}\|X/  {print $0}' infile

Can anyone suggest what to do ?
Thanks!

Last edited by gio001; 04-06-2011 at 10:13 AM..
# 2  
Old 04-05-2011
With GNU awk you may need the --posix parameter:

Code:
$ awk --posix '/PV1\|(.*\|){16}X\|/ { print $0 }' infile
PV1|two|three|four|5|6|7|8|9|10|11|12|13|14|15|16|17|X|rest|of|string

Idea, how about using | as FS
Code:
awk -F\| '$1=="PV1" && $18=="X"' infile

# 3  
Old 04-06-2011
I have this working with grep
Code:
grep 'PV1\|\([^|]*\|\)\{16\}\|X' infile > outfile

but the same regexp does not work in awk:
Code:
awk '/PV1\|\([^|]*\|\)\{16\}\|X/ {print $0}' infile > outfile

Any idea what I can correct in the awk statement?
Thanks
# 4  
Old 04-06-2011
Does your awk have the --posix argument?

---------- Post updated at 07:26 AM ---------- Previous update was at 07:04 AM ----------

Quote:
Originally Posted by gio001
I have this working with grep
Code:
grep 'PV1\|\([^|]*\|\)\{16\}\|X' infile > outfile

Dosn't work properly for me:
Code:
$ grep 'PV1\|\([^|]*\|\)\{16\}\|X' infile
PV1-This shouldn't Match!
PV1|two|three|four|5|6|7|8|9|10|11|12|13|14|15|16|17|X|rest|of|string

Something like this seems right for grep:
Code:
grep -E 'PV1\|([^|]*\|){16}X\|' infile

Awk turns out to be pretty similar, note some awks (GNU) require --posix others don't
Code:
 awk --posix '/PV1\|([^|]*\|){16}X\|/ { print $0 }' infile

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

REG Expression

Need your help in creating regular expression for particular set. let say I have given two dates 20130623 to 20140625. I need to create regular for the dates which fall in between above two dates. (4 Replies)
Discussion started by: gvkumar25
4 Replies

2. Shell Programming and Scripting

Confusion with Reg expression

I want to make a REG Expression to validate the directory. my dirsample is below: /abc/abc/abc abc/abc/abc abc/abc/abc/ /abc/a bc/abc /a bc/abc/abc /abc/abc/a bc / abc/abc/abc /abc/ abc/abc /abc/.abc /.abc/abc / // /abc /.abc And my code is below: grep -E '^\/(+\/?)+$' dirsample (4 Replies)
Discussion started by: franksunnn
4 Replies

3. Shell Programming and Scripting

reg expression in perl

how to uniquely match each of the words seperated by / in perl ${REP_PATH}/FUNCTIONAL/wide1c_1.0V/max/qor.rpt https://www.unix.com/images/misc/progress.gif (5 Replies)
Discussion started by: dll_fpga
5 Replies

4. Shell Programming and Scripting

reg expression in perl

./GEN_SCR.pl -f ${REP_PATH}/FUNCTIONAL/wide1c_1.0V/max/qor.rpt -o ${REP_PATH}/FUNCTIONAL/GEN2_wide1c_1.0V_max.csv where GEN_SCR.pl is as below...i need to check whether max or min is coming in the argument to the script ...how to do this? ${REP_PATH}/FUNCTIONAL/wide1c_1.0V/max/qor.rpt ... (0 Replies)
Discussion started by: dll_fpga
0 Replies

5. Shell Programming and Scripting

Reg expression

Please let me understand this reg expression (\s+')(.*)('\s+)(.)(.*)(\/.*)/) i have doubt in the below 2.I'm not understanding why back-tick used? (\s+') and ('\s+) (2 Replies)
Discussion started by: dll_fpga
2 Replies

6. Shell Programming and Scripting

Python (startswith) reg expression

Hello together, Yesterday I have recieved the script in the forum which works well. This script should insert in the previous line, the line that starts with ";". I'd like this process to recur after any arbitrary sign unless there's a number as a sign at the beginning of a line. Actual... (14 Replies)
Discussion started by: research3
14 Replies

7. Shell Programming and Scripting

Reg expression For

HI system.sysUpTime.0 : Timeticks: (1519411311) 175 days, 20:35:13.11 From the above output i need only 175days in a perl script.. Please Help (2 Replies)
Discussion started by: Harikrishna
2 Replies

8. Shell Programming and Scripting

perl reg expression

I have regular expression like this ( replace + with \+) ($mod_server) = ($server =~ /\+/\\+/g); the above is failing with error . what's wrong with it . Thanks (1 Reply)
Discussion started by: talashil
1 Replies

9. UNIX for Dummies Questions & Answers

Help with Reg. Expression

I need help with this: Can any one tell me what does these below mean: 1. "\(.\).*") != '/' 2. sed 's+^\./++;s+/.*++' 3. sed "s+${f}/+ + Thanks in advance (7 Replies)
Discussion started by: moe2266
7 Replies

10. Shell Programming and Scripting

Awk - Using a Shell Variable in the Reg Expression

Hi all, I have a shell variable $test1 that holds a value derived from some other processing. What I need to do is use that $test1 as the input to a awk regular expression: nawk -F"," -v tester=$test1 ' /tester/{ print $0 } ' $inputFile So what I have is tester... (6 Replies)
Discussion started by: not4google
6 Replies
Login or Register to Ask a Question