Display lines after match is found within specified range


 
Thread Tools Search this Thread
# 1  
Display lines after match is found within specified range

I have a file which has collection of segments occuring n(For eg.100) times
Code:
ISA
GS
ST
NM1*85
N3
N4
NM1*IL
N3
N4
REF*D9*1001
ISE
GE
SE
ISA
GS
ST
NM1*85
N3
N4
NM1*IL
N3
N4
REF*D9*1002
ISE
GE
SE
ISA
GS
ST
NM1*85
N3
N4
NM1*IL
N3
N4
REF*D9*1003
ISE
GE
SE
ISA
GS
ST
.
.
.
.
ISA
GS
ST
NM1*85
N3
N4
NM1*IL
N3
N4
REF*D9*1100
ISE
GE
SE

To get N3 under NM1*85 only i used follwing code
Code:
awk 'c-->0;/NM1\*85/{c=1}' file

while doing so i got all the 100 N3 under NM1*85
But what i need is to get N3 from within a specified range for eg(1001 to 1010),by using the sequnce no mentioned in REF*D9 segment
Code:
My Shell is csh

# 2  
try

Code:
awk '/REF\*D9\*1001/{c=1}
/REF\*D9\*1010/{c=""}
/N3/ && c {print}' file

# 3  
Code:
~/$ perl  -ne '$n3 = $_ if $nm;
  print "$1 : $n3" if ( ( /^REF\*D9\*([\d]+)$/ ) && ($1 >= 1001)&& ($1 <= 1100) );
  $nm=/^NM1\*85$/;
' file

Should do what you require
# 4  
If you are searching the next line below NM1*85 in the range between REF*D9*1001 - 1010, this will do:
Code:
awk    '/REF\*D9\*1001/ {B1=1}
        /REF\*D9\*1010/ {B1=0}
        /NM1\*85/ && B1 {getline;print}
       ' file
N3
N3
N3

If you need the line containing N3, try this:
Code:
awk     '/REF\*D9\*1001/ {B1=1}
         /REF\*D9\*1010/ {B1=B2=0}
         /NM1\*85/ && B1 {B2=1}
         /N3/ && B2      {print}
        ' file

If you want to hand over the range parameters dynamically, try
Code:
awk    'match ($0, P1)  {B1=1}
        match ($0, P2)  {B1=B2=0}
        /NM1\*85/ && B1 {B2=1}
        /N3/ && B2      {print}
       ' P1='REF\*D9\*1001' P2='REF\*D9\*1002' file
N3
N3

# 5  
All have provided solution based on bash shell but i need solution in csh shell i have already mentioned it
# 6  
You think awk and perl are bash-specific? If yes, then you don't know what a shell is.

Have you tried the solutions provided to you?
# 7  
My OS info
Code:
uname -a
SunOS viper 5.9 Generic_117171-07 sun4u sparc SUNW,Sun-Fire-480R

when i tried Rudic's below mentioned code
Code:
awk    'match ($0, P1)  {B1=1}
        match ($0, P2)  {B1=B2=0}
        /NM1\*85/ && B1 {B2=1}
        /N3/ && B2      {print}
       ' P1='REF\*D9\*1001' P2='REF\*D9\*1002' file

I got the folloing error
Code:
awk: syntax error near line 1
awk: bailing out near line 1

I searched net and found if awk fails we can use nawk while using nawk no error message displayed but i didnt get any output
 

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Display match or no match and write a text file to a directory

The below bash connects to a site, downloads a file, searches that file based of user input - could be multiple (all that seems to work). What I am not able to figure out is how to display on the screen match found or no match found" and write a file to a directory (C:\Users\cmccabe\Desktop\wget)... (4 Replies)
Discussion started by: cmccabe
4 Replies

2. UNIX for Dummies Questions & Answers

awk - (URGENT!) Print lines sort and move lines if match found

URGENT HELP IS NEEDED!! I am looking to move matching lines (01 - 07) from File1 and 77 tab the matching string from File2, to File3.txt. I am almost done but - Currently, script is not printing lines to File3.txt in order. - Also the matching lines are not moving out of File1.txt ... (1 Reply)
Discussion started by: High-T
1 Replies

3. Shell Programming and Scripting

Grep multiple exact match, do not display lines

Hi, Need help to grep the following from a file x. I just want to grep exact match not lines and not partial word. CONFSUCCESS CONFFAIL CONFPARTIALSUCCESS >cat x xczxczxczc zczczcxx CONFSUCCESS czczczcczc czxxczxzxczcczc CONFFAIL xczxczcxcczczc zczczczcz CONFPARTIALSUCCESS czczxcxzc ... (4 Replies)
Discussion started by: rajeshwebspere
4 Replies

4. Shell Programming and Scripting

Display lines of two date range from syslog file

Hi Guys, I want to display lines from Solaris syslog file but with 2 dates range. I have some similar solution (https://www.unix.com/shell-programming-scripting/39293-grep-log-file-between-2-dates-4.html) which works fine but as you know syslog has different date format (Jan 22) so this is not... (1 Reply)
Discussion started by: prashant2507198
1 Replies

5. Shell Programming and Scripting

Grep range of lines to print a line number on match

Hi Guru's, I am trying to grep a range of line numbers (based on match) and then look for another match which starts with a special character '$' and print the line number. I have the below code but it is actually printing the line number counting starting from the first line of the range i am... (15 Replies)
Discussion started by: Kevin Tivoli
15 Replies

6. UNIX for Dummies Questions & Answers

How to display lines by range specified?

My input file is N3*123 ABC FLATS~ REF*D9*10000000001~ N3*223 ABC FLATS~ REF*D9*10000000002~ N3*323 ABC FLATS~ REF*D9*10000000003~ N3*423 ABC FLATS~ REF*D9*10000000004~ N3*523 ABC FLATS~ REF*D9*10000000005~ N3*623 ABC FLATS~ REF*D9*10000000006~ N3*723 ABC FLATS~ REF*D9*10000000007~ N3*823... (2 Replies)
Discussion started by: nsuresh316
2 Replies

7. UNIX for Dummies Questions & Answers

Display n lines after match found and other line

I have a file like this DoctorName Address1 Address2 DOB InsuredName Address1 Address2 DOB PatientName Address1 Address2 DOB ClaimNo1 DoctorName Address1 Address2 DOB InsuredName (2 Replies)
Discussion started by: nsuresh316
2 Replies

8. UNIX for Dummies Questions & Answers

Display n lines before match found

I have a file with following data A B C D E F G H I K L M N and search pattern is G Expected output (3 Replies)
Discussion started by: nsuresh316
3 Replies

9. UNIX for Dummies Questions & Answers

awk display the match and 2 lines after the match is found.

Hello, can someone help me how to find a word and 2 lines after it and then send the output to another file. For example, here is myfile1.txt. I want to search for "Error" and 2 lines below it and send it to myfile2.txt I tried with grep -A but it's not supported on my system. I tried with awk,... (4 Replies)
Discussion started by: eurouno
4 Replies

10. UNIX for Dummies Questions & Answers

Grep and display n lines after the match is found.

Hello, How do I use grep to find a pattern in a list of file and then display 5 lines after the pattern is matched Eg: I want to match the string GetPresentCode in all files in a folder and then see 4 lines following this match. I am not sure if grep is what should be used to achieve. Thanks!... (3 Replies)
Discussion started by: cv_pan
3 Replies

Featured Tech Videos