Script to extract particular record


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Script to extract particular record
# 1  
Old 06-28-2011
Script to extract particular record

Hi,

I have a large file with huge number of records which are of following pattern:
Code:
TYPE1
{
originNodeType : "IVR"
originHostName : "AAIVR"
originTransactionID : "01310559"
originTimeStamp : "20110620192440+0530"
hostName : "hhhh"
voucher : '0'D
rProfileID : "ZZZZ"
Before
{
Flags : "10000000"
Bal : "123"
}
After
{
Flags : "10000000"
Bal : "123"
}
}
TYPE1
{
originNodeType : "IVR"
originHostName : "AAIVR"
originTransactionID : "01310559"
originTimeStamp : "20110620192440+0530"
hostName : "hhhh"
rProfileID : "ZZZZ"
voucher : '0'D
Before
{
Flags : "10000000"
Bal : "123"
}
After
{
Flags : "10000000"
Bal : "123"
}
}
TYPE1
{
originNodeType : "UGW"
originHostName : "AAUGW"
originTransactionID : "01310560"
originTimeStamp : "20110620192441+0530"
hostName : "asdf"
voucher : '1'D
Before
{
Flags : "00000000"
Bal : "123"
}
After
{
Flags : "10000000"
Bal : "124"
}
}
TYPE2
{
originNodeType : "IVR"
originHostName : "AAIVR"
originTransactionID : "01462112"
originTimeStamp : "20110624001221+0530"
hostName : "aqws"
Counter : '1'D
errorCode : 'invalidNumber (19)'
}
TYPE2
{
originNodeType : "UGW"
originHostName : "AAUGW"
originTransactionID : "01462113"
originTimeStamp : "20110624001221+0530"
hostName : "aqws"
Counter : '2'D
errorCode : 'invalidAcc (18)'
}
TYPE2
{
originNodeType : "IVR"
originHostName : "AAIVR"
originTransactionID : "01462112"
originTimeStamp : "20110624001222+0530"
hostName : "aqws"
Counter : '1'D
errorCode : 'invaliddate (17)'
}

How can I extact particular record from this script which meets certain criteria like:
originTransactionID : "01310559"

Output for above case should be:
Code:
TYPE1
{
originNodeType : "IVR"
originHostName : "AAIVR"
originTransactionID : "01310559"
originTimeStamp : "20110620192440+0530"
hostName : "hhhh"
voucher : '0'D
rProfileID : "ZZZZ"
Before
{
Flags : "10000000"
Bal : "123"
}
After
{
Flags : "10000000"
Bal : "123"
}
}

For criteria

originTransactionID : "01462112" , output should be

Code:
TYPE2
{
originNodeType : "IVR"
originHostName : "AAIVR"
originTransactionID : "01462112"
originTimeStamp : "20110624001222+0530"
hostName : "aqws"
Counter : '1'D
errorCode : 'invaliddate (17)'
}


Thanks,

Last edited by Franklin52; 06-29-2011 at 05:39 AM.. Reason: Please use code tags for code and data samples, thank you
# 2  
Old 06-28-2011
The lack of awk friendly record separators suggests a fold-lines-into-one sed, gerp, and unfold:
Code:
(
  cat your_file
  echo TYPE9
 ) | sed '
  :loop
  /\nType[0-9]/!{
    $d
    N
    b loop
   }
  /'"$KEY"'/{
    h
    s/\nTYPE[0-9].*//
    p
    g
   }
  s/.*\n//
  b loop
  '

Quick Narrative:
  1. Concatenate an extra TYPE9 after your file as a boundary.
  2. sed set a b(ranch)/t(est) target loop
  3. If we have not accumulated a whole record plus the next TYPE,
  4. and it is not time to toss that final fake TYPE,
  5. then stack the next line in the buffer
  6. and branch back to #2 check again #3
  7. Getting here says we do have that whole record plus, so if our key is in there,
  8. hold a copy of the current buffer
  9. take off the last line
  10. print the record (all lines in buf now)
  11. get the held copy
  12. take off all but the last line
  13. go looking for the rest of that record.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Extract timestamp from first record in xml file and it checks if not it will replace first record

I have test.xml <emp><id>101</id><name>AAA</name><date>06/06/14 1811</date></emp> <Join><id>101</id><city>london</city><date>06/06/14 2011</date></join> <Join><id>101</id><city>new york</city><date>06/06/14 1811</date></join> <Join><id>101</id><city>sydney</city><date>06/06/14... (2 Replies)
Discussion started by: vsraju
2 Replies

2. Shell Programming and Scripting

Extract record from file based on section.

input file output file (1 Reply)
Discussion started by: lathigara
1 Replies

3. Shell Programming and Scripting

Extract record in shell script,so far using awk without success

hello, I require help in the following. There is a report similar to the ones shown here. I need to do couple of things 10/07 12:47 0003210042 R TENN ANVISER0 DELF96A.V1.O.TENRREG 120710 124657 U 00000 DELFOR 1 4331 10/07 12:47 0003210043 S TENN... (2 Replies)
Discussion started by: rakeshv
2 Replies

4. Shell Programming and Scripting

Unix command to extract a record from a table

Suppose there is a table like the following...I just wanted to know if there is any command using which we can get the record/name of the person who joined before 2005.. Sl Name des y.o.joining 1 Ram Engineer 2001 2 Hari Doctor 2004 3 David Plumber 2005 4 Rahim painter 2007 5 gurmeet... (1 Reply)
Discussion started by: satyajit007
1 Replies

5. Shell Programming and Scripting

PERL: Extract random record which has 4 lines each

Hi, I have a data file with millions of record (N). Each record was saved in 4 lines. So there are total of NX4 lines in the data file. For Example: Host1 a b c d Host2 e f g h Host3 i j k (2 Replies)
Discussion started by: phoeberunner
2 Replies

6. Shell Programming and Scripting

How to extract first and last line of different record from a file

Hi all I want to inquire that is there any unix command that can help me while extracting first and last line in a file ( TEST.dat) for example in the below record i want to extract the line that are in BOLD text or in other words i want to extract line no 1,3,4 and 7 aa 1 2 3 aa 2 3 4... (5 Replies)
Discussion started by: Bungash125
5 Replies

7. Shell Programming and Scripting

ksh scripting: Extract 1 most recent record for unique key

I'm loading multiple delimited files into an Oracle DB using sqlldr on Unix. I would like to get only the most recent record per each unique key. There may be multiple updates for each key, but I only want the most recent one. There is a date column in my delimited files, so I'm using cat to... (2 Replies)
Discussion started by: OPTIMUS_prime
2 Replies

8. UNIX for Dummies Questions & Answers

Using sed to extract Nth record?

I have a comma-separated record and I'd like to use sed to pull the Nth record from it. It seems like it'd need to be something like this: sed -n 's/'"\,$1\,"'/&/p' Am I close? (3 Replies)
Discussion started by: doubleminus
3 Replies

9. UNIX for Dummies Questions & Answers

How to extract duplicate records with associated header record

All, I have a task to search through several hundred files and extract duplicate detail records and keep them grouped with their header record. If no duplicate detail record exists, don't pull the header. For example, an input file could look like this: input.txt HA D1 D2 D2 D3 D4 D4... (17 Replies)
Discussion started by: run_eim
17 Replies

10. Shell Programming and Scripting

how to extract last line in record

Hi all!! After experiencing great helpfulness the last time I posted a problem at this site, I once again turn to the forum for expert help. The problem: I have a file.dat containing x, y, and z coordinates, like: x y z 1 1 4 1 2 3 1 3 9 2 1 7 2 2 2 2 3 8 3 1 ... (7 Replies)
Discussion started by: bjorb
7 Replies
Login or Register to Ask a Question