Help With String Manipulation


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Help With String Manipulation
# 1  
Old 08-09-2011
Help With String Manipulation

Hi Guru's,
I need some help with data manipulation using shell scripting. I know how to replace the whole string but not part of the string.
The value after aa= should be replaced with the value in the mail leaving ,OU=111,OU=222,DC=333 as is. Below are the inputs and expected outputs.

Code:
Input:
dn: aa=XYZ,OU=111,OU=222,DC=333
mail: xyz@123.com
uid: xyz@123.com
sdf: aaa
 
dn: aa=abc,OU=111,OU=222,DC=333
mail: npr@123.com
uid: npr@123.com
sdf: www
 
dn: aa=def,OU=111,OU=222,DC=333
mail: def@123.com
uid: def@123.com
sdf: eee
 
dn: aa=ram,OU=111,OU=222,DC=333
mail: med@123.com
uid: med@123.com
sdf: qqq

Code:
output:
dn: aa=xyz@123.com,OU=111,OU=222,DC=333
mail: xyz@123.com
uid: xyz@123.com
sdf: aaa
 
dn: aa=npr@123.com,OU=111,OU=222,DC=333
mail: npr@123.com
uid: npr@123.com
sdf: www
 
dn: aa=def@123.com,OU=111,OU=222,DC=333
mail: def@123.com
uid: def@123.com
sdf: eee
 
dn: aa=med@123.com,OU=111,OU=222,DC=333
mail: med@123.com
uid: med@123.com
sdf: qqq

Thanks in advance,
Sam
# 2  
Old 08-09-2011
Hi, see if this works for you :
Code:
awk '{sub(/aa=[^,]*/,"aa="$4)}1' RS= ORS='\n\n' infile

(on Solaris use /usr/xpg4/bin/awk)
This User Gave Thanks to Scrutinizer For This Post:
# 3  
Old 08-09-2011
You can read each block into the buffer in sed and move strings around:
Code:
sed '
  :loop
  $b sub
  /\n$/b sub
  N
  b loop
  :sub
  s/^dn: aa=[^@]*\(@.*\nmail: \([^@]*\)@\)/dn:aa=\2\1/
 ' infile >outfile


Last edited by DGPickett; 08-09-2011 at 05:50 PM..
These 2 Users Gave Thanks to DGPickett For This Post:
# 4  
Old 08-09-2011
Hi scrutinizer,

Thanks for the quick response. It is working fine for the sample input. My input file block does not have the same sequence all the time. mail: parameter can be any were in the block. I want the value in mail: parameter to be copied.

Thanks,
Sam
# 5  
Old 08-09-2011
I edited above to make it more specific.
# 6  
Old 08-09-2011
Hi DGPickett,
It is not wrorking for all the senarios. The code is working only if the aa value is in email format. I want the value from mail to be substituted after aa="" and leaving OU=111,OU=222,DC=333 as is. mail parameter can be any where in the section.Below are all the inout senarios that I have. I am adding the expected output.
Code:
Input:
dn: aa=XYZ,OU=111,OU=222,DC=333
uid: xyz@123.com
sdf: aaa
mail: xyz@123.com
 
dn: aa=abc,OU=111,OU=222,DC=333
uid: npr@123.com
mail: npr@123.com
sdf: www
 
dn: aa=qqq@231.com,OU=111,OU=222,DC=333
mail: def@123.com
uid: def@123.com
sdf: eee
 
dn: aa=ram,OU=111,OU=222,DC=333
mail: med@123.com
uid: med@123.com
sdf: qqq

Code:
output:
dn: aa=xyz@123.com,OU=111,OU=222,DC=333
uid: xyz@123.com
sdf: aaa
mail: xyz@123.com
 
dn: aa=npr@123.com,OU=111,OU=222,DC=333
uid: npr@123.com
mail: npr@123.com
sdf: www
 
dn: aa=def@123.com,OU=111,OU=222,DC=333
mail: def@123.com
uid: def@123.com
sdf: eee
 
dn: aa=med@123.com,OU=111,OU=222,DC=333
mail: med@123.com
uid: med@123.com
sdf: qqq

Thanks for the help
Sam

---------- Post updated at 07:15 PM ---------- Previous update was at 04:22 PM ----------

Hi Dgpickett,

The below code is partly working but the stiing "OU=111,OU=222,DC=333" after aa=med@123.com is getting deleted for all the entries that the code is processing. How can we retain OU=111,OU=222,DC=333 for all the processed entries.Below is the code.
Code:
sed '
  :loop
  $b sub
  /\n$/b sub
  N
  b loop
  :sub
  s/^dn: aa=[^@]*\(@.*: \([^@]*\)@\)/dn: aa=\2\1/
 ' input >output

Below is the output that I am getting
Code:
Output of one of the entries
dn: aa=med@123.com
mail: med@123.com
uid: med@123.com
sdf: qqq

Thanks,
Sam
# 7  
Old 08-09-2011
Code:
awk -F'[ =,]' '/^dn:/{x=$3;y=$0;next}/^mail:/{sub(x,$NF,y);$0=y ORS$0}1' file

This User Gave Thanks to danmero For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

String Manipulation

I'm making a little game in Perl, and I am trying to remove the first instance of a character in an arbitrary string. For example, if the string is "cupcakes"and the user enters another string that contains letters from "cupcake" e.g: "sake"the original string will now look like this (below)... (3 Replies)
Discussion started by: whyte_rhyno
3 Replies

2. Shell Programming and Scripting

Deleting part of a string : string manipulation

i have something like this... echo "teCertificateId" | awk -F'Id' '{ print $1 }' | awk -F'te' '{ print $2 }' Certifica the awk should remove 'te' only if it is present at the start of the string.. anywhere else it should ignore it. expected output is Certificate (7 Replies)
Discussion started by: vivek d r
7 Replies

3. Shell Programming and Scripting

String manipulation

Hello Could you help with small script: How to split string X1 into 3 string String X1 can have 1 or many strings X1='A1:B1:C1:D1:A2:B2:C2:D2:A3:B3:C3:D3' This is output which I want to have: Z1='A1:B1:C1:D1' Z2='A2:B2:C2:D2' Z3='A3:B3:C3:D3' (5 Replies)
Discussion started by: vikus
5 Replies

4. Shell Programming and Scripting

String manipulation

Hi All, Pls help me out on the below, 05 LAMSZ201-ZM-MEMO2-DATE02-5 PIC X(10). 05 LAMSZ201-ZM-MEMO2-AMT02-5 PIC S9(13)V99. 05 LAMSZ201-ZM-MEMO2-TYPE02-6 PIC XXX. 05 LAMSZ201-ZM-MEMO2-DATE02-6 PIC X(10). 05 ... (2 Replies)
Discussion started by: baskivs
2 Replies

5. Shell Programming and Scripting

String Manipulation

Hi, I have a file in the following format 123|shanwer|15DEC2010|bgbh|okok|16JAN3000|okok| I want the following to be in following format 123|shanwer|12\15\2010|bgbh|okok|01\16\3000|okok| SED/PERL/AWK Gurus could you please help me with this? Thanks Shankar (8 Replies)
Discussion started by: Shan2210
8 Replies

6. Shell Programming and Scripting

I need help with string manipulation

First of all I am VERY new to this so bare with me and try and explain everything even if it seems simple. Basically I want to read a line of text from a html file. See if the line of text has a certain string in it. copy an unknown number of characters (the last 4 characters wiil be ".jpg" the... (1 Reply)
Discussion started by: c3lica
1 Replies

7. Shell Programming and Scripting

string manipulation

i have a file that contains a pattern like this: ajay 1234 newyork available kumar 2345 denver singh 2345 newyork ajay 3456 denver kumar 3456 newyork singh 3456 delhi available ajay 4567 miami kumar 4567 miami singh 4567 delhi i want to search for each line... (5 Replies)
Discussion started by: ajay41aj
5 Replies

8. Shell Programming and Scripting

String manipulation

Hi, i am just gettin exposed to UNIX. Could anyone of u help me out with dis problem..? i have a variable 'act' which has the value as follows, echo $act gives -0- -0- -----0---- 2008-06-04 -0- -0- echo "$act" | awk '{print ($act)}' gives, -0- -0- -----0---- 2008-06-04 -0- -0- I... (2 Replies)
Discussion started by: jerrynimrod
2 Replies

9. UNIX for Dummies Questions & Answers

string manipulation

Hi, I have a file with rows of text like so : E100005568374098100000015667 D100005568374032000000112682 H100005228374060800000002430 I need to grab just the last digits(bolded) of each line without the proceeding text/numbers. Thanks (5 Replies)
Discussion started by: james6
5 Replies

10. Shell Programming and Scripting

String Manipulation

Hi, Suppose I have the following text in a file. ORA-00942: table or view does not exist ORA-01555: snapshot too old: rollback segment number string with name "string" too small Is there any way I can list all the text that starts only with 'ORA-'? Or there any grep command that can... (7 Replies)
Discussion started by: kakashi_jet
7 Replies
Login or Register to Ask a Question