Stuck on a matching, copying type problem


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Stuck on a matching, copying type problem
# 1  
Old 04-04-2008
Stuck on a matching, copying type problem

Hi all, I am new to these forum and to scripting in general for that matter. i have been looking through the forums for something that could explain my problem. I have be come pretty familiar with sed and awk but I can not seem to figure this out... I am trying to match data from 3 files but every thing I have tried doesn't seem to do what i need it to. And maybe this is something better suited for perl or python ( which i have no experience with ).. ok here goes...

Problem:

1. Want to match $1b to $2a, if match copy $2b to $4a

2. Want to match $1c to $2a, if match copy $2c to $4a (and overwrite the data in $4a)


file_a is comma seperated and has 4 fields

$1a,$2a,$3a,$4a

file_b is comma seperated and has 2 fields

$1b,$2b

file_c is comma seperated and has 2 field

$1c,$2c



Here is example of the data in the files:

Code:
berserker# more file_a

gpf135cm,gpf090079cs,purple,
gpf136cm,gpf100002cs,blue,
gpf138cm,gpf100065cs,purple,
gpf140cm,gpf110005cs,purple,
gpf141cm,gpf110037cs,purple,
gpf139cm,gpf100101cs,purple,
gpf139cm,gpf100119cs,purple,

 
berserker# more file_b

hou020067cs, synopsis = Urgent message file problems reported
hou090022cs, synopsis = Urgent message file problems reported
hou090056cs, synopsis = Node was detected as causing a spike by job 16811167
hou090064cs, synopsis = Node was disabled by Jeff ext8592
gpf090079cs, synopsis = Excessive ECC errors detected
gpf100002cs, synopsis = Excessive ECC errors detected
gpf090079cs,Apr  1 20:28:20 gpf090079cs kernel: MC1: CE page 0x1ac685 offset 0x240 grain 8 syndrome 0x4a row 0 channel 0 label "": bluesmoke_k8
gpf100002cs, 


berserker# more file_c

gpf090079cs MC1: row 0 channel 0



So far I have figured out how to extract all this information and organize it in these files using AWK and SED, but I am not sure that I can get it to do this type of problem... Any help on this problem that i have been beating on my keyboard for would be greatly appreciated. Thank you

Last edited by Yogesh Sawant; 04-04-2008 at 09:39 AM.. Reason: added code tags
# 2  
Old 04-05-2008
The join command is a completely generic solution to this type of problem. However, it requires input files to be sorted. You could create awk scripts which read in one file in the BEGIN part and then processes the other as its regular input. Perl or Python might suit themselves better to this type of problem, though. Learning the basics of Perl is not particularly challenging if you are already familiar with sed and awk.
# 3  
Old 04-07-2008
Cool, thanks for you reply Era. I in fact went to a half-priced book store this weekend and picked up O'reilly's Learning Perl Third edition for 5 bucks, I think the newest edition is four. So I am sure it will be find. Smilie
# 4  
Old 04-07-2008
i see that at any point of time, you'll be handling two files. since you're familiar with awk, the following may work for you, even though I agree perl might be a better tool for the job.

for FILE_1 in file_b file_c
do

#Read file_a line by line
while read file1line
do
#Extract the column from file_b or file_c that you want to compare to in file a
coltocompare_bc=`awk blah blah`

#Here, get the column from file a
coltocompare_a=`awk blah blah`

#Here compare coltocompare_bc and coltocompare_a and do what you like.
echo "Maybe this will work, maybe not"

done < FILE_1

done
# 5  
Old 04-14-2008
Good gravy, why and i not getting how to do this seemingly simple problem? I really feel that I am making this harder then it needs to be..

Code:
#!/usr/bin/perl
#
$data = 'hou100cm,hou010008cs,purple
hou132cm,hou090026cs,purple
hou133cm,hou090057cs,purple
hou134cm,hou090064cs,blue
hou190cm,hou230095cs,blue
hou193cm,hou240058cs,purple
hou195cm,hou240124cs,purple
hou195cm,hou240125cs,purple
gpf132cm,gpf090013cs,purple
gpf132cm,gpf090028cs,purple
gpf133cm,gpf090036cs,purple
gpf133cm,gpf090051cs,blue
gpf133cm,gpf090059cs,purple
gpf134cm,gpf090067cs,purple
gpf134cm,gpf090079cs,blue
gpf136cm,gpf100002cs,blue
gpf136cm,gpf100003cs,purple
gpf136cm,gpf100024cs,blue
gpf141cm,gpf110059cs,blue
gpf139cm,gpf100099cs,blue
gpf139cm,gpf100100cs,purple
gpf139cm,gpf100101cs,purple';

$blue = 'gpf100024cs, MC1: row 1 channel 1
gpf100002cs, Bad DIMM slot (motherboard)
gpf090079cs, MC1: row 0 Channel 0
hou230095cs, Urgent message file problems reported
hou090064cs,  NODE USE DISABLED BY Jeff';

(master, node, status) = split(',', $data);
(node2,desc) = split(',', $blue);

I have tried to match $blue{$node2} =~ $data{$node} ;

then join($blue{$desc}) to $data for days now, i think i am confusing myself sense I think I have come up with at least 5 different ways that I thought would work on this... but no luck...

Can someone tell me what I am doing wrong here, my eyes have grown tired and my mind numb, please help if you can.

Basically two files $data and $Blue
Data has 0,1,2 fields and Blue has 0 and 1 field.
If $blue{field0} =~ $data{field1}, then copy or move $blue{field1} to $data{field3}. And of course field3 is newly created.

thank you for anyhelp . Smilie

Last edited by derek3131; 04-15-2008 at 09:12 AM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Type casting problem

hi guys, i m new to shell script.. i dont know how to type cast string into integers and i mention my problem below.. date="21091988" month=$((${date:2:2})) # extract the month from previous date variable temp=$(($month*23)) when i am trying to calculate the temp value i got the... (5 Replies)
Discussion started by: raadhaakrishnan
5 Replies

2. Shell Programming and Scripting

korn shell display lenght problem!!! i got stuck on this

Using the KSH, write a shell script called display_by_length, which takes an absolute pathname to a directory and displays all ordinary files in the directory ordered by their length; for each file listed, display the name of the file and its length - nothing else. Extend this script to take an... (1 Reply)
Discussion started by: babuda0059
1 Replies

3. Shell Programming and Scripting

Problem with type-casting in awk

Hi I'm trying to write a script which takes an integer as input and checks for files with size > input and displays it on screen. The code I've tried : echo 'Enter the min file size expected' read filesize du -ah <folder name> | awk -F: '$1>int(filesize) {print $1,$2)' is always... (28 Replies)
Discussion started by: vivek.bharadwaj
28 Replies

4. Shell Programming and Scripting

Find problem listing directories even -type f

Hi All, #!/bin/ksh find /home/other -ls -type f -xdev | sort -nrk7 | head -2 >bigfile.txt The above is my script, which writes the large file into a file called bigfile.txt. My script contains only the above two lines. after execution i am getting the output like find: cannot chdir to... (1 Reply)
Discussion started by: Arunprasad
1 Replies

5. UNIX for Dummies Questions & Answers

Stuck with a simple find problem

Hi, Need some simple find help. I need to search for all .so files within sol directory. My directory tree has mix of directories and i want to search only inside sol directory. I could get this done combining find with for, any option to do this with find alone. for a in `find .... (13 Replies)
Discussion started by: vibhor_agarwali
13 Replies

6. SCO

Sco 6 copying problem

We are using GTAR for daily copies of our database using Travan cartridges (Tapestor drive)and are having intermittent problems. Some days it does not copy and we can't figure out why. Sometimes it seems to be hanging and a tape status command doesn't return anything. Other times it doesn't copy... (0 Replies)
Discussion started by: Yrr88
0 Replies

7. UNIX for Advanced & Expert Users

Problem in copying files!!

I have requirement of one directory in /tmp area on Sun server. The area contains following files : brdcems# /tmp/.tivoli >>ls -lt total 0 srwxrwxrwx 1 root other 0 Nov 16 13:41 a9c30c14-80bf256e-94 srwxrwxrwx 1 root other 0 Nov 12 12:28 a9c30cc8-80bf256e-94 I... (4 Replies)
Discussion started by: ssk
4 Replies

8. UNIX for Advanced & Expert Users

terminal type problem with cygwin on aix

hey, I use cygwin to connect to AIX 5.2 but when I open vi I get an error saying: ex: 0602-108 cygwin is not a recognized terminal type how can I fix that? I thought cygwin was tty vt100? (1 Reply)
Discussion started by: rein
1 Replies

9. Shell Programming and Scripting

Problem with variable type

Dear All, I am trying to write an script to calculate geometric centre of selected residues of a protein structure. Say I have a PDB file (a text containing the x, y, and z coordinates of atoms of a protein). I want to extract the X coordinates of the atoms belonging to the interested residues... (2 Replies)
Discussion started by: siavoush
2 Replies

10. UNIX for Dummies Questions & Answers

Copying all files of type "pdf"

Hi, Within a shell script I'm trying to copy all the files in a directory structure to another folder but only the files of type "pdf" I have made a start but I can't work out how to finish it. find $ATEBUILD/doc/user -name "*.pdf" | xargs cp THEN WHAT? I hope this makes sense! Rob (6 Replies)
Discussion started by: milage
6 Replies
Login or Register to Ask a Question