awk - find first occurence and replace it


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting awk - find first occurence and replace it
# 1  
Old 03-04-2015
Power awk - find first occurence and replace it

Hello,

I have a requirement to replace the whole string with first occurence of value of a key-value pair.

I have to do this inside awk, as the data I need to work is inside an awk loop.

value of my variable(say LogText) looks like:
LogText=
Code:
date=04Mar message=hello1 name=caq message=hello2 address=abc message=hello3 city=xyz

I need to extract value of first occurence of message (ie.., hello1) into a new variable

I am using the function gensub inside awk to do this. I have tried:

Code:
awk -v LogText="$Log_Text" '{ 
MSG_VALUE=gensub(/^.*message=([A-Za-z0-9]+).*$/,"\\1", 1,LogText); 
print MSG_VALUE
}'

But this is always storing the value of last occurence of message(=hello3) into MSG_VALUE.

I have also tried negative lookaback:
Code:
MSG_VALUE=gensub(/^.*(?!<message).*message=([A-Za-z0-9]+).*$/,"\\1", 1,LogText);

Maybe something wrong here, it fails to match any part of string.

Could anyone help?
I've spent quite a few hours to figure this out and searching on the web before posting here.


Thanks,
CaQ
# 2  
Old 03-04-2015
Just add an exit at the end, so it will exit after the first match
Code:
awk -v LogText="$Log_Text" '{  
MSG_VALUE=gensub(/^.*message=([A-Za-z0-9]+).*$/,"\\1", 1,LogText)  
print MSG_VALUE
exit
  }'

# 3  
Old 03-04-2015
Try
Code:
 awk -vL="$LogText" 'BEGIN {sub(/^[^ ]* message=/, "", L); sub (/ .*$/, "", L); print L}'
hello1

This User Gave Thanks to RudiC For This Post:
# 4  
Old 03-04-2015
Quote:
Originally Posted by RudiC
Try
Code:
 awk -vL="$LogText" 'BEGIN {sub(/^[^ ]* message=/, "", L); sub (/ .*$/, "", L); print L}'
hello1

Thanks for this. It worked for me.
I have similar need for another use case.
Here, the variable LogText contains a JSON(which can be multiline), and I want to extract the first occurence same way:

LogText:
Code:
{
    "date" : "04-Mar",
    "name" : "john doe",
    "message" : "hello1",
    "role" : "dev",
    "message" : "hello2",
    "dept" : "chemistry",
    "message" : "hello3"
}

I am trying to obtain the first value of message (hello1) from this
Any clue on this? Smilie
# 5  
Old 03-05-2015
Try
Code:
awk -vL="$L" 'BEGIN {n=split (L, T, "\n"); for (i=1; i<=n; i++) if (T[i] ~ /message/) {split (T[i], K, "\""); print K[4]; break}}'
hello1

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Find and replace in awk

I have a file that I am trying to find a specific word, then replace text within that string. file TestA2015 TestB2016 Example. Replace TestB2016 to TestB0000, so if TestB is found replace the original "2016" to "0000". Thank you :). awk tried awk '{ sub(/TestB$/, "0000", $6) }1'... (5 Replies)
Discussion started by: cmccabe
5 Replies

2. Shell Programming and Scripting

Replace second to last but one consecutive occurence

Hi Unix Mates, I have requirement where in which I have to replace second to last -1 occurence of space with a word and last occurence of a space with a word and a space,input would be a file. Desired result: Second consecutive to last-1 occurence of space replace with: HRU LAST... (5 Replies)
Discussion started by: Kingcobra
5 Replies

3. Shell Programming and Scripting

Find fields and replace using awk

Code: Using ksh Var1=`awk -F";" {print $1}' Input2.txt` cat Input1.txt | awk -F";" '{$3="Var1"}' > Output.txt (13 Replies)
Discussion started by: Roozo
13 Replies

4. Shell Programming and Scripting

Find and Replace in awk

Friends, I have more the thousand lines like this. check.cloud1.port=342 check.cloud2.port=5456 check.cloud3.port-4564 But we need to transfer it to _CHECK.CLOUD1.PORT_=342 _CHECK.CLOUD2.PORT_=5456 _CHECK.CLOUD3.PORT_=4564 Any one could pls help of this. Thanks in Advance ... (1 Reply)
Discussion started by: jothi basu
1 Replies

5. Shell Programming and Scripting

[Solved] Find and replace till nth occurence of a special character

Hi, I have a requirement to search for a pattern in each line in a file and remove the in between words till the 3rd occurrence of double quote ("). Ex: CREATE TABLE "SCHEMANAME"."AMS_LTV_STATUS" (Note: "SCHEMANAME" may changes for different schemas. Its not a fixed value) I need to... (2 Replies)
Discussion started by: satyaatcgi
2 Replies

6. Shell Programming and Scripting

sed and awk -Find and Replace

All, I have thousands of lines in a file with following format DATA=_ONE_XXX_YYY_CCC_HHHG_ DATA1=_GGG_JJJJ_HHH_UUU_JJJJ_HHHH_LLL_ DATA3=_MMM_GG_NN_QQQQ_FFF_III_ I want to replace _ with . by ignoring the first (=_) and last (_) So that out put should looks like... (4 Replies)
Discussion started by: baluchen
4 Replies

7. Shell Programming and Scripting

Replace matching nth occurence

Hi for eg my file has: val1 | val2 | val1 | val2 | val1 | val2 | val1 | val2 | here i need to replace '|' with '|\n' where the occurence of '|' is divisble by 2 so that the output comes like this val1 | val2 | val1 | val2 | val1 | val2 | val1 | val2 | Requesting suggestions in... (1 Reply)
Discussion started by: raghav288
1 Replies

8. Shell Programming and Scripting

Simple find and replace with AWK

I am trying to write a find and replace script with AWK and I can't seem to get it to work. I need it to find this exact string *P*: and replace the P with a T or just replcare the whole thing with *T*:. this is what I have tried awk 'BEGIN {gsub(/\*P*:/,"\*T*:"); print}' ${INFILE} >... (4 Replies)
Discussion started by: wbshrk
4 Replies

9. Shell Programming and Scripting

awk help to do conditional find and replace

Hi, I have a Line input for awk as follows DROP MATERIALIZED VIEW MCR.COMM_STACK; CREATE MATERIALIZED VIEW "MCR"."COMM_STACK" ON PREBUILT TABLE WITHOUT REDUCED PRECISION USING INDEX REFRESH FAST ON DEMAND START WITH sysdate+0 NEXT SYSDATE + 7 WITH PRIMARY KEY USING DEFAULT... (3 Replies)
Discussion started by: rajan_san
3 Replies

10. Shell Programming and Scripting

awk find/replace

Greetings all. I have web site that has long option and switch lists. When I insert something new into these files, the lists need to be reordered. IE: 1 => apple 2 => pear 3 => bannana 4 => orange --------------------- Add grape as #2 1 => apple 2 => grape 3 => pear 4 =>... (2 Replies)
Discussion started by: RobertSubnet
2 Replies
Login or Register to Ask a Question