How can I retrieve the matching records from data file mentioned?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting How can I retrieve the matching records from data file mentioned?
# 1  
Old 12-02-2016
How can I retrieve the matching records from data file mentioned?

Code:
XYZNA0000778800Z
16123000012300321000000008000000000000000
16124000012300322000000007000000000000000
17234000012300323000000005000000000000000
17345000012300324000000004000000000000000
17456000012300325000000003000000000000000
9
XYZNA0000778900Z
16123000012300321000000008000000000000000
16124000012300322000000007000000000000000
17234000012300323000000005000000000000000
17345000012300324000000004000000000000000
17456000012300325000000003000000000000000
9

I have above file format from which I want to find a matching record. For example, match a number(7789) on line starting with XYZ and once matched look for a matching number (7345) in lines below starting with 1 until it reaches to line starting with 9. retrieve the entire line record. How can I accomplish this using shell script, awk, sed or any combination.

Expected Output:

Code:
XYZNA0000778900Z
17345000012300324000000004000000000000000


Last edited by later_troy; 12-03-2016 at 12:05 PM.. Reason: Adding Expected Output
# 2  
Old 12-03-2016
Your requirements are vague and I don't know what a "line record" is. With the three inputs you have shown us, what output are you hoping to produce?

What is you definition of a line record?

What operating system are you using?

What shell are you using?

What have you tried to solve this problem on your own?
# 3  
Old 12-03-2016
I have edited question with expected output.

The shell is Bash.

Sorry for not being clear, let me explain this data format/requirement. Records that starts with XYZ contains item number (7789) and lines below it starting with 1 have store number immediately after 1. Line starting with 1 indicates store record and a line xyz indicates record for item number. A store number is of 4 characters (7345). The entire line starting with 1 has other details related to store number like quantity etc. for the item number above it. These item-store combination block of records end at 9 and after that new item-store combination block of records start.

I have tried to solve this on my own using
Code:
grep -A5 7789 filename

but I can only get record of item number or store number but not both at same time and my command produces unnecessary store records which I don't want to see. I only want to see a specific item-store combination of the record. Also number of line for store records (starting with 1) varies for each item so I can not accurately predict at which line number after XYZ the store record will be.
# 4  
Old 12-03-2016
Your first step approach above will give false positives if 7789 occurred in any other line as well... improve and extend it like

Code:
grep -A5 ^XYZ.*7789 filename | grep -E "^XYZ|^17345"
XYZNA0000778900Z
17345000012300324000000004000000000000000

There might be leaner, more elegant solutions, though.
# 5  
Old 12-03-2016
This might work but consider this 7789 (item number) will not repeat again in entire file but store number (7345) will definitely occur again in file for other item number. In your solution we are assuming that store record (17345***) will be in 5 lines immediately after matching record of (XYZ*7789*). This may not be the case because the store record I am looking for could be at any line not only within
Code:
grep -A5

. It could be after 10 lines or 20 lines or 50 lines. There are no fixed number of store records after line XYZ.
# 6  
Old 12-03-2016
Quote:
Originally Posted by later_troy
.
.
.
In your solution ...
.
.
.
de facto, it was YOUR solution, adapted.
For any record length, try
Code:
awk '
/^9/                    {L = 0
                        }
$0 ~ "^XYZ.*" PAT1      {L = 1
                         print
                        }
$0 ~ "^1" PAT2 && L 
' PAT1="7789" PAT2="7345" file
XYZNA0000778900Z
17345000012300324000000004000000000000000

# 7  
Old 12-03-2016
Thank you, it works but do you mind explaining what are you doing. It would be helpful to understand. the code.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Shell script to filter records in a zip file that contains matching columns from another file

Not sure if this is the correct forum for this question. I have two files. file1.zip, file2 Input: file1.zip col1, col2 , col3 a , b , 0:0:0:0:0:c436:9346:d40b x, y, 0:0:0:0:0:880:39f9:c9a7 m, n , 0:0:0:0:0:80c7:9161:fe00 file2.txt col1 c4:36:93:46:d4:0b... (1 Reply)
Discussion started by: anil.v
1 Replies

2. Shell Programming and Scripting

Extract data according to keys from filename mentioned in file

Hello experts, I want to join a file with files whosE names are mentioned in one of the columns of the same file. File 1 t1,a,b,file number 1 t1,a,c,file number 1 t2,c,d,file number 2 t2,c,e,file number 2 t2,c,f,file number 2 t2,c,g,file number 2 t3,e,f,file number 3 file number 1... (3 Replies)
Discussion started by: ritakadm
3 Replies

3. Shell Programming and Scripting

Retrieve data from one file comparing the ID in the second file

Hi all, I have one file with IDs Q8NDM7 P0C1S8 Q8TF30 Q9BRP8 O00258 Q6AWC2 Q9ULE0 Q702N8 A4UGR9 Q13426 Q6P2D8 Q9ULM3 A8MXQ7 I want to compare ID file with another file which has complete information about these IDs and also about other IDs which are not in the above ID file. As... (10 Replies)
Discussion started by: kaav06
10 Replies

4. Shell Programming and Scripting

Help to retrieve data from two files matching a string

Hello Experts, I have come back to this forum after a while now, since require a better way to get my result.. My query is as below.. I have 3 files -- 1 Input file, 2 Data files .. Based on the input file, data has to be retreived matching from two files which has one common key.. For EX:... (4 Replies)
Discussion started by: shaliniyadav
4 Replies

5. UNIX for Advanced & Expert Users

Retrieve data and redirect to a file

How to write a shell script to retrieve datas from database after that this database are redirect to a excell sheet and then i got a mail that gives details about the database with the column name and data.. I m using oracle 9i... Thanks, Anup Das (2 Replies)
Discussion started by: anupdas
2 Replies

6. Shell Programming and Scripting

Creating a file with matching records from two other files

Hi All, I have 2 files (file1 & file2). File1 and File2 have m and n columns respectively I have to compare value in column1 of file1 with file2 and find line(s) from file2 matching column1 value. The value can be in any column in the matching lines of file2. The output should be... (10 Replies)
Discussion started by: Swagi
10 Replies

7. Programming

to find header in Mp3 file and retrieve data

hi all, In an mp3 file , data is arranged in sequence of header and data ,how to retrieve data between two headers. Is the data between two headers fixed? because as per theory it says 1152 samples will be there , but dont knw how many bits one sample correspond to? it would help if any c... (2 Replies)
Discussion started by: shashi
2 Replies

8. UNIX for Dummies Questions & Answers

How can you delete records in a file matching a pattern?

I am curious if the following can be done in a file in unix. Let's say I have a flat file with the following data AAA,12,2,,,, BBB,3,1,,,, CCC,,,,, DDD,2,,,,, SQQ,,,,, ASJ,,3,5 I only want to capture the data with values into a new file. If the data contains the pattern ,,,,, as in... (2 Replies)
Discussion started by: mode09
2 Replies

9. Shell Programming and Scripting

Retrieve data from a file

Hello guys I want to retrieve two data from a file, like this: bash-2.03$ cat numtest 123456 123457 bash-2.03$ more ./test_num #!/bin/bash num1= num2= cnt=1 while read x do num${cnt}=$x cnt=$(($cnt+1)) done <$1 echo $num1 "\n" $num2 But when i executed this script, error... (2 Replies)
Discussion started by: tpltp
2 Replies

10. Shell Programming and Scripting

finding null records in data file

I am having a "|" delimited flat file and I have to pick up all the records with the 2nd field having null value. Please suggest. (3 Replies)
Discussion started by: dsravan
3 Replies
Login or Register to Ask a Question