Copying corresponding entries based on search


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Copying corresponding entries based on search
# 1  
Old 04-06-2011
Copying corresponding entries based on search

Hi Guru's

I need some help to accomplish the below. I have two files, file 1 has ldap entries with one of its parameter cn. I have one more file with cn and corresponding row id. The out put should get the cn from file1 search for the cn in file2 and get the value of id and add the id entry in file 1. Below is the sample.

File 1:
Code:
# entry-id: 100
cn: test@test1.com
abc: 111
def: 222
xyz: 333
 
# entry-id: 101
cn: test@test2.com
abc: 111
def: 222
xyz: 334
 
# entry-id: 102
cn: test@test3.com
abc: 111
def: 222
xyz: 335
 
# entry-id: 103
cn: test@test4.com
abc: 111
def: 222
xyz: 336
 
# entry-id: 104
cn: test@test5.com
abc: 111
def: 222
xyz: 337

File 2
Code:
cn: test@test1.com, id: 1111
cn: test@test2.com, id: 2222
cn: test@test3.com, id: 3333
cn: test@test4.com, id: 4444
cn: test@test5.com, id: 5555

out put file:
Code:
# entry-id: 100
cn: test@test1.com
abc: 111
def: 222
xyz: 333
id: 1111
 
# entry-id: 101
cn: test@test2.com
abc: 111
def: 222
xyz: 334
id: 2222
 
# entry-id: 102
cn: test@test3.com
abc: 111
def: 222
xyz: 335
id: 3333
 
# entry-id: 103
cn: test@test4.com
abc: 111
def: 222
xyz: 336
id: 4444
 
# entry-id: 104
cn: test@test5.com
AccountLock: true
abc: 111
def: 222
xyz: 337
id: 5555

Thanks in advance for the help.
Samingla

Last edited by Scott; 04-12-2011 at 03:59 PM.. Reason: Code tags, please...
# 2  
Old 04-06-2011
Code:
awk 'NR==FNR{a[$1" "$2]=$4" "$5}NR>FNR{print NF?$0:a[x]"\n";if(/^cn:/) x=$0}' FS="[, ]" file2 file1

This User Gave Thanks to yinyuemi For This Post:
# 3  
Old 04-12-2011
hi Yinyuemi,

Thanks for reply. The one liner is working as expected. I need to add one more line in out put file using the same script. I have to add "object class: trs" after adding the id in the output file. Can you please update me with the script. The out put should be like the below.
Code:
# entry-id: 100
cn: test@test1.com
abc: 111
def: 222
xyz: 333
id: 1111
object class: trs

# entry-id: 101
cn: test@test2.com
abc: 111
def: 222
xyz: 334
id: 2222
object class: trs


# entry-id: 102
cn: test@test3.com
abc: 111
def: 222
xyz: 335
id: 3333
object class: trs


# entry-id: 103
cn: test@test4.com
abc: 111
def: 222
xyz: 336
id: 4444
object class: trs


# entry-id: 104
cn: test@test5.com
AccountLock: true
abc: 111
def: 222
xyz: 337
id: 5555
object class: trs

Thanks in advance,
Samingla

Last edited by Scott; 04-12-2011 at 04:00 PM..
# 4  
Old 04-12-2011
Code:
awk 'NR==FNR{a[$1" "$2]=$4" "$5}NR>FNR{print NF?$0:a[x]"\n""object class: trs\n";if(/^cn:/) x=$0}' FS="[, ]" file2 file1

This User Gave Thanks to yinyuemi For This Post:
# 5  
Old 04-12-2011
Yinyuemi,

Thanks for the quick reply. The code is not working as expected. It is not adding the id value and I am seeing and extra space before the id. The out put is as below.
Code:
# entry-id: 104
cn: test@test5.com
AccountLock: true
abc: 111
def: 222
xyz: 337
 id: 
object class: trs

The output should be like this
Code:
# entry-id: 104
cn: test@test5.com
AccountLock: true
abc: 111
def: 222
xyz: 337
id: 5555
object class: trs

Thanks,
Samingla

Last edited by Scott; 04-12-2011 at 04:01 PM..
# 6  
Old 04-12-2011
Hi Samingla,
it seems to work for me:
Code:
awk 'NR==FNR{a[$1" "$2]=$4" "$5}NR>FNR{print NF?$0:a[x]"\n""object class: trs\n";if(/^cn:/) x=$0}' FS="[, ]" file2 file1
# entry-id: 100
cn: test@test1.com
abc: 111
def: 222
xyz: 333
id: 1111
object class: trs
# entry-id: 101
cn: test@test2.com
abc: 111
def: 222
xyz: 334
id: 2222
object class: trs
# entry-id: 102
cn: test@test3.com
abc: 111
def: 222
xyz: 335
id: 3333
object class: trs
# entry-id: 103
cn: test@test4.com
abc: 111
def: 222
xyz: 336
id: 4444
object class: trs
# entry-id: 104
cn: test@test5.com
abc: 111
def: 222
xyz: 337
id: 5555
object class: trs

Best,

Y
# 7  
Old 04-12-2011
Hi Y,
Thanks for the update. I am seeing an issue here. In file1 I have some entries that are not related to file2. I mean, there are some entries in file1 that do not have an ralation to file2. With the current script, all the entries in file one are being added with the object class: trs. what I need is script has to check for entries from file2 if cn value found, update file1 with id and object class. if cn value not fuld in file2 no changes should be made for the entries. Below is the input and out put that I need. I really appriciate your help.

File 1:
Code:
# entry-id: 100
cn: test@test1.com
abc: 111
def: 222
xyz: 333
 
# entry-id: 101
cn: test@test2.com
abc: 111
def: 222
xyz: 334
 
# entry-id: 102
cn: test@test3.com
abc: 111
def: 222
xyz: 335
 
# entry-id: 102-2
cn: test@test02-2.com
abc: 111
def: 222
xyz: 335
 
# entry-id: 103
cn: test@test4.com
abc: 111
def: 222
xyz: 336
 
# entry-id: 104
cn: test@test5.com
abc: 111
def: 222
xyz: 337
 
# entry-id: 104-2
cn: test@test04-4.com
abc: 111
def: 222
xyz: 337

File 2
Code:
cn: test@test1.com, id: 1111
cn: test@test2.com, id: 2222
cn: test@test3.com, id: 3333
cn: test@test4.com, id: 4444
cn: test@test5.com, id: 5555

out put file:
Code:
# entry-id: 100
cn: test@test1.com
abc: 111
def: 222
xyz: 333
id: 1111
object class: trs
 
# entry-id: 101
cn: test@test2.com
abc: 111
def: 222
xyz: 334
id: 2222
object class: trs
 
# entry-id: 102
cn: test@test3.com
abc: 111
def: 222
xyz: 335
id: 3333
object class: trs
 
# entry-id: 102-2
cn: test@test02-2.com
abc: 111
def: 222
xyz: 335
 
# entry-id: 103
cn: test@test4.com
abc: 111
def: 222
xyz: 336
id: 4444
object class: trs
 
# entry-id: 104
cn: test@test5.com
AccountLock: true
abc: 111
def: 222
xyz: 337
id: 5555
object class: trs
 
# entry-id: 104-2
cn: test@test04-4.com
abc: 111
def: 222
xyz: 337

Thanks,
Sam

Moderator's Comments:
Mod Comment Please use code tags

Last edited by Scott; 04-12-2011 at 04:03 PM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Copying files to directories based on first 6 character

guys, i did create a script but its too long, though it function the same. # cat nightlyscan.sh #!/usr/ksh deyt=`date +"%Y-%m-%d"` for i in `ls -lrt|grep $deyt|awk '{print $9}'` do cp -f $i /S1/Sophos/logger/ done # but i did not paste it all. this is the desired. (9 Replies)
Discussion started by: kenshinhimura
9 Replies

2. UNIX for Dummies Questions & Answers

Copying a file based on a incremented folder name

I need to routinely cp a file out of the highest incremented folder named PROD_2_6.1_xxx where xxx (3 numerical values) is incremented only once a night starting at 100 and ending 999 over a period of time. I am not worried about copying a subset of a complete file while it is being created by some... (5 Replies)
Discussion started by: sf_cb
5 Replies

3. Shell Programming and Scripting

Copying section of file based on search criteria

Hi Guru's, I am new to unix scripting. I have a huge file with user details in it(file2) and I have another file with a list of users(file1). Script has to search a user from file1 and get all the associated lines from file2. Example: fiel1: cn=abc cn=DEF cn=xyx File 2: dn:... (10 Replies)
Discussion started by: Samingla
10 Replies

4. Shell Programming and Scripting

Copying lines from multiple logfiles, based on content of the line

d df d d (1 Reply)
Discussion started by: larsk
1 Replies

5. Shell Programming and Scripting

Copying files based on a pattern

Hi All, I need to find and list the last 5 days files in that exact name with "MIM" and copy to another directory. please help me in this there is around 30000 files Thanks Murali (7 Replies)
Discussion started by: 969murali@gmail
7 Replies

6. Shell Programming and Scripting

Search and replace - pattern-based

Hey folks! I am new to shell-scripting, but I have a problem that I would like to solve using a script. I create very large html forms, used for randomized trials. In these forms, each question is supplied with a variable that looks something like this: PROJECT_formNN Where NN is the question... (1 Reply)
Discussion started by: Roevhat
1 Replies

7. SuSE

Search all files based on first and in all listed files search the second patterns

Hello Linux Masters, I am not a linux expert therefore i need help from linux gurus. Well i have a requirement where i need to search all files based on first patterns and after seraching all files then serach second pattern in all files which i have extracted based on first pattern.... (1 Reply)
Discussion started by: Black-Linux
1 Replies

8. Shell Programming and Scripting

Backup script: Copying and removing directories based on list

I am writing a simple backup script, but I cannot figure out how to remove directories that are found in a list. For example: DONT_COPY=" .adobe/ .bin/google-earth " tar -zcvf - * --exclude=$DONT_COPY | openssl des3 -salt -k $1 | dd of=$(hostname)-$(date +%Y%m%d).tbz > COPIED Note that... (4 Replies)
Discussion started by: dotancohen
4 Replies

9. UNIX for Dummies Questions & Answers

copying files from one location to another based on a list

I have a text list of about 3,000 file names (image files), which exist on a server and that I want to copy over to another location. I understand the Unix cp code, but what's the string to have it copy multiple files based on an external list? Many thanks! (4 Replies)
Discussion started by: rebornhonest
4 Replies

10. Shell Programming and Scripting

column based search

Hi, I need to search one file based on the entry from another; eg. file1 has entries; 45654 34768 12345 File2 has entries 23234 somestring 4312 45654 somestring 34768 12345 somestring 45654 so I need to pick first entry in file1 which eg. '45654' and... (8 Replies)
Discussion started by: user_007
8 Replies
Login or Register to Ask a Question