Complicated SED search required


 
Thread Tools Search this Thread
Homework and Emergencies Emergency UNIX and Linux Support Complicated SED search required
# 1  
Old 11-14-2009
Complicated SED search required

Hi All,

I'm trying to extract all the description fields from a MIB file which contain multiple instances of the following text:

Code:
        ENTERPRISE compaq
        VARIABLES  { sysName, cpqHoTrapFlags, cpqSsBoxCntlrHwLocation,
                     cpqSsBoxCntlrIndex, cpqSsBoxBusIndex, cpqSsBoxVendor,
                     cpqSsBoxModel, cpqSsBoxSerialNumber, cpqSsBoxFanStatus }
        DESCRIPTION
           "Storage System fan status change.

            The agent has detected a change in the Fan Status of a storage
            system.  The variable cpqSsBoxFanStatus indicates the current
            fan status.

            User Action: If the fan status is degraded or failed, replace
            any failed fans."

              --#TYPE "Fan Status Change (8026)"

Ideally I need to search through the document, and for each instance of 'DESCRIPTION' found, I need to extract the text found immediately after it in quotes, and join them onto a single line. So for example the above would produce something like:

Code:
Storage System fan status change. The agent has detected a change in the Fan Status of a storage system.  The variable cpqSsBoxFanStatus indicates the current fan status. User Action: If the fan status is degraded or failed, replace any failed fans.

Each instance should be on a seperate line. I'm getting nowhere with this, as my grasp of sed/awk is basic to say the least.

If someone could help me out here, it would literally save me hours or even days in monotonous work!

tia.
# 2  
Old 11-14-2009
Perhaps, as a start...
Code:
awk '
 { $1 = $1 }
 /DESCRIPTION/ { ORS = " "; P = 1; next }
 /"$/ && P { ORS = RS; sub( /"$/, "" ); print; P = 0 }
 { sub( /^"/, "" ) }
 P
' 

Storage System fan status change.  The agent has detected a change in the Fan Status of a storage system. The variable cpqSsBoxFanStatus indicates the current fan status.  User Action: If the fan status is degraded or failed, replace any failed fans.

# 3  
Old 11-15-2009
tr, and sed can do the trick...

Code:
$ tr '\n' ' ' < t1 | sed -rn 's/.*(DESCRIPTION[^"]*")([^"]*)".*/\2/p;' | sed -rn 's/[ \t]+/ /gp'
Storage System fan status change. The agent has detected a change in the Fan Status of a storage system. The variable cpqSsBoxFanStatus indicates the current fan status. User Action: If the fan status is degraded or failed, replace any failed fans.

Note: t1 should have the specified content.
# 4  
Old 11-15-2009
if you have gawk
Code:
awk 'BEGIN{RS="--#TYPE"}
NR==1{
 gsub(/.*DESCRIPTION/,"")
 gsub("\n"," ")
 gsub(/ +| +$/," ")
 print 
}' file

or line by line processing without slurping whole file
Code:
awk '/--#TYPE/{f=0}
/DESCRIPTION/{f=1; next}
f&&!/--#TYPE/{
    gsub(/ +| +$/," ")
    printf $0
}' file

# 5  
Old 11-15-2009
Code:
gawk '/DESCRIPTION/{lp=1;next}
/TYPE/{lp=0;next}
lp {gsub(/[ ][ ]*[\t]*/," ",$0); print}
' ORS=" "  file.txt

SmilieSmilieSmilieSmilie

---------- Post updated at 04:27 AM ---------- Previous update was at 04:13 AM ----------

Quote:
Originally Posted by ahmad.diab
Code:
gawk '/DESCRIPTION/{lp=1;next}
/TYPE/{lp=0;next}
lp {gsub(/[ ][ ]*[\t]*/," ",$0); print}
' ORS=" "  file.txt

SmilieSmilieSmilieSmilie

small modification to let the code print every paragraph in separate line.
Code:
gawk '/DESCRIPTION/{lp=1;next}
/TYPE/{lp=0; print "\n" ;next}
lp {gsub(/[ ][ ]*[\t]*/," ",$0); print}
' ORS=" "  file.txt

# 6  
Old 11-15-2009
Quote:
Originally Posted by scottn
Perhaps, as a start...
What do you mean a start Smilie. It seems to work really well, also for multiple MIB descriptions plus it leaves out the double quotes. I think I managed to shorten it a little:
Code:
awk '
  { $1 = $1 }
  /DESCRIPTION/ { p=" "; next }
  p { p=p" "$0; if (/"$/) {gsub(/ *"/,"",p); print p;p=""}}
' infile


Last edited by Scrutinizer; 11-15-2009 at 05:43 AM..
# 7  
Old 11-15-2009
Quote:
Originally Posted by Scrutinizer
What do you mean a start Smilie. It seems to work really well, also for multiple MIB descriptions. I managed to shorten it a little:
Code:
awk '
  { $1 = $1 }
  /DESCRIPTION/ { p=" "; next }
  p { p=p" "$0; if (/"$/) {gsub(/ *"/,"",p); print p;p=""}}
' infile


This code is printing the first DESCRIPTION paragraph but if there 2 or more this code will print only the first paragraph.


ex:-
paragraph..

Code:
ENTERPRISE compaq
        VARIABLES  { sysName, cpqHoTrapFlags, cpqSsBoxCntlrHwLocation,
                     cpqSsBoxCntlrIndex, cpqSsBoxBusIndex, cpqSsBoxVendor,
                     cpqSsBoxModel, cpqSsBoxSerialNumber, cpqSsBoxFanStatus }
        DESCRIPTION
           "Storage System fan status change.

            The agent has detected a change in the Fan Status of a storage
            system.  The variable cpqSsBoxFanStatus indicates the current
            fan status.

            User Action: If the fan status is degraded or failed, replace
            any failed fans."

              --#TYPE "Fan Status Change (8026)"

DESCRIPTION
000000000000000000000000
3333333333333333333333
211111111111111111

--#TYPE i7i7i7i

output is

Code:
Storage System fan status change.  The agent has detected a change in the Fan Status of a storage system. The variable cpqSsBoxFanStatus indicates the current fan status.  User Action: If the fan status is degraded or failed, replace any failed fans.

so the code need modification...it is a start as scottn said.
BR
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Assistance required to decode sed search using /1

Hi, I am trying to extract line number (first number), as well as everything from TSVal onwards. 4 1.474005 172.18.124.142 -> 74.125.228.46 TCP 2450940617 74 44021 > https Seq=0 Win=5840 Len=0 MSS=1380 SACK_PERM=1 TSval=2450940617 TSecr=0 WS=64 6 1.488149 172.18.124.142 ->... (1 Reply)
Discussion started by: sand1234
1 Replies

2. UNIX for Beginners Questions & Answers

How to search a text in file and retrieve required lines following it with UNIX command?

I have requirement to search for a text in the file and retrieve required lines that is user defined with unix command. Eg: Find the text UNIX in the below file and need to return Test 8 & Test 9 Test 1 Test 2 Test 3 Test 4 UNIX Test 5 Test 6 Test 7 Test 8 Test 9 Result can... (8 Replies)
Discussion started by: Arunkumarsak4
8 Replies

3. Shell Programming and Scripting

sed help - search/copy from one file and search/paste to another

I am a newbie and would like some help with the following - Trying to search fileA for a string similar to - AS11000022010 30.4 31.7 43.7 53.8 60.5 71.1 75.2 74.7 66.9 56.6 42.7 32.5 53.3 I then want to replace that string with a string from fileB - ... (5 Replies)
Discussion started by: ncwxpanther
5 Replies

4. Shell Programming and Scripting

sed with complicated variable pattern

Hi, Below is the content of the file how it looks: # EMAIL #export BMS_EMAIL_ENABLED=true export BMS_EMAIL_ENABLED=false #export BMS_EMAIL_SERVER=esasmtp01.kohls.com export BMS_EMAIL_SERVER=esasmtp01.kohls.com.SMTP_SERVICE export BMS_EMAIL_FROM_ADDRESS=ec_notify@kohlsectest.com export... (4 Replies)
Discussion started by: pravintse
4 Replies

5. Shell Programming and Scripting

sed help required

Hi All, I have one file with below type of data in it, $ cat test.txt ###123 ###xyxytuerwb ###2 ###tyupe Here I would like to replace all the characters with "x" after the 3 "###" with the same number of characters. Can you please help me to achieve this. (7 Replies)
Discussion started by: gr8_usk
7 Replies

6. Shell Programming and Scripting

Parsing complicated CSV file with sed

Yes, there is a great doc out there that discusses parsing csv files with sed, and this topic has been covered before but not enough to answer my question (unix.com forums). I'm trying to parse a CSV file that has optional quotes like the following: "Apple","Apples, are fun",3.60,4.4,"I... (3 Replies)
Discussion started by: analog999
3 Replies

7. Shell Programming and Scripting

Search complicated strings on file

Can someone help me? I been figuring out how I can search and extract a complicated search string from a file. The whole string is delimited by a period. And the file where I'm searching is composed of differnt string such as that. For example, I have this search string: and I have a file... (3 Replies)
Discussion started by: Orbix
3 Replies

8. Shell Programming and Scripting

Script Search replace - complicated

I have a text file for which i need a script which does some fancy search and replace. Basically i want to loop through each line, if i find an occurance of certain string format then i want to carry on search on replace another line, once i replaced this line i will contine to search for the... (7 Replies)
Discussion started by: kelseyh
7 Replies

9. Shell Programming and Scripting

complicated search within file

Hi, I have following problem. I have a file with time stamps and some data describing what happened between time stamps. Something like this: 10:00 meeting with K meeting with L 11:00 lunch 12:00 work with K 13:00 From this file I have to get a file with... (7 Replies)
Discussion started by: mmike
7 Replies

10. Shell Programming and Scripting

Help in sed required.

Hi All, I am facing a small problem in sed. I want to insert a line in the existing file. Existing code: access to attr=userPassword by self write by * auth access to * by self write by users read by anonymous auth Desired code: access to attr=userPassword by self... (14 Replies)
Discussion started by: nua7
14 Replies
Login or Register to Ask a Question