Sponsored Content
Top Forums UNIX for Dummies Questions & Answers File updation on matching key Post 302975204 by PRAMOD 96 on Thursday 9th of June 2016 11:12:49 AM
Old 06-09-2016
Hi Rudic,

Thanks for your update on this. But it is not working for my case. And one more thing I have not got your code
Code:
awk 'NR == FNR {SUM[$3]+=$7+$9; next} {sub (FS $8 FS, FS sprintf ("%06d", SUM[$3]/2) FS)}1' file file

Here I have not got "file" means which file ? I have used your code for my input but it not worked.
I brief u about input and output . Input as below
Code:
RRD       0Z9He4r000000Lk 200741     00120160129    STMT151117055527001            0000 1 000000 000001
RRD       0Z9He4r00001Gnl 200745     00120160129    STMT151117055527001            0000 1 000000 000001
RRD       0Z9He4r00001IPC 3025339512 33820160129    STMT151117055527001            0000 1 000000 000005
RRD       0Z9He4r00000pTO 4025339512 33820160129    STMT151117055527001            0000 0 000000 000002
RRD       0Z9He4r000001xE 5025339518 33820160129    STMT151117055527001            0000 0 000000 000004
RRD       0Z9He4r00000SHB 7025339518 33820160129    STMT151117055527001            0000 1 000000 000003
RRD       0Z9He4r00000XXX 7025339518 33823333333    STMT151117055527001            0000 3 000000 000002

in the Input given column 3 is the key column. consider row 1
Code:
RRD       0Z9He4r000000Lk 200741     00120160129    STMT151117055527001            0000 1 000000 000001

Here key is 200741. So search for 200741 in remaining rows of column 3. Here is no other key like 200741. So here calculation will be like
((7th column value + 9th column value)of row 1)/2 ie (1+1)/2=1. So update column 8 of row 1 with value 000001.


Explanation 2 : Consider row 6
Code:
RRD       0Z9He4r00000SHB 7025339518 33820160129    STMT151117055527001            0000 1 000000 000003

here key is 7025339518. So search for 7025339518 in remaining rows of column 3. Here you will find key 7025339518 in row 7 as well. so for this the calculation
will be like ((7th column value + 9th column value)of row 6 + (7th column value + 9th column value)of row 7)/2 => ((1+3)+(3+2))/2=5. So update column 8 of row 6
and 7 with value 000005


So Expected output for above result is :

Code:
RRD       0Z9JS1l000000Lk 200741     00120160129    STMT151117055527001            0000 1 000001 000001
RRD       0Z9JS1l00001Gnl 200745     00120160129    STMT151117055527001            0000 1 000001 000001
RRD       0Z9JS1l000001xE 5025339518 33820160129    STMT151117055527001            0000 0 000002 000004
RRD       0Z9JS1l00000pTO 4025339512 33820160129    STMT151117055527001            0000 0 000001 000002
RRD       0Z9JS1l00001IPC 3025339512 33820160129    STMT151117055527001            0000 1 000003 000005
RRD       0Z9JS1l00000SHB 7025339518 33820160129    STMT151117055527001            0000 1 000005 000003
RRD       0Z9He4r00000XXX 7025339518 33823333333    STMT151117055527001            0000 3 000005 000002

Please update code accordingly..


---------- Post updated at 08:42 PM ---------- Previous update was at 08:00 PM ----------

Hi Ridic,
your code worked. Smilie
Code:
awk 'NR == FNR {SUM[$3]+=$7+$9; next} {sub (FS $8 FS, FS sprintf ("%06d", SUM[$3]/2) FS)}1' $input_file $input_file

for below input :
Code:
RRD       0Z9He4r000000Lk 200741     00120160129    STMT151117055527001            0000 1 000000 000001
RRD       0Z9He4r00001Gnl 200745     00120160129    STMT151117055527001            0000 1 000000 000001
RRD       0Z9He4r00001IPC 3025339512 33820160129    STMT151117055527001            0000 1 000000 000005
RRD       0Z9He4r00000pTO 4025339512 33820160129    STMT151117055527001            0000 0 000000 000002
RRD       0Z9He4r000001xE 5025339518 33820160129    STMT151117055527001            0000 0 000000 000004
RRD       0Z9He4r00000SHB 7025339518 33820160129    STMT151117055527001            0000 1 000000 000003
RRD       0Z9He4r00000XXX 7025339518 33823333333    STMT151117055527001            0000 3 000000 000002

output as below :
Code:
RRD       0Z9He4r000000Lk 200741     00120160129    STMT151117055527001            0000 1 000001 000001
RRD       0Z9He4r00001Gnl 200745     00120160129    STMT151117055527001            0000 1 000001 000001
RRD       0Z9He4r00001IPC 3025339512 33820160129    STMT151117055527001            0000 1 000003 000005
RRD       0Z9He4r00000pTO 4025339512 33820160129    STMT151117055527001            0000 0 000001 000002
RRD       0Z9He4r000001xE 5025339518 33820160129    STMT151117055527001            0000 0 000002 000004
RRD       0Z9He4r00000SHB 7025339518 33820160129    STMT151117055527001            0000 1 000004 000003
RRD       0Z9He4r00000XXX 7025339518 33823333333    STMT151117055527001            0000 3 000004 000002

Just one minor updation needed. If the division result is decimal value ie for row 6 and 7 it is 4.5 but it shows it as 4 . Can we make it as round value as 5. ie if result is 6.5 then it should be display 7

Last edited by RudiC; 06-09-2016 at 12:25 PM.. Reason: Removed unnecessary quote tags.
 

10 More Discussions You Might Find Interesting

1. Programming

Directory updation Notification?

Hi, I'm a UNIX newbie .. so forgive me if this question sounds dumb. :) Is it possible for Unix to notify a process that a particular directory has been updated? Rather that the process constantly polling the directory ... Awaiting your replies .. Thanks, VJ (6 Replies)
Discussion started by: vjsony
6 Replies

2. Linux

gcc updation on Linux machine

Hi All, I already have gcc complier installed in my machine. Its version is : gcc version 3.2.2 20030222 (Red Hat Linux 3.2.2-5) I am not sure whethere it's is latest gcc version available. I want to update my gcc version. Can anyone please suggest me what is the latest and stable gcc... (1 Reply)
Discussion started by: bisla.yogender
1 Replies

3. Shell Programming and Scripting

Matching by key fields

I have a file (key.dat) that contains two columns: AA|1234| BB|567| CC|8910| I have another file (extract.dat) that contains some data: SD|458|John|Smith| AA|3345|Frank|Williams| AA|1234|Bill|Garner| BD|0098|Yu|Lin| BB|567|Gail|Hansen| CC|8910|Ken|Nielsen| I want to compare the... (5 Replies)
Discussion started by: ChicagoBlues
5 Replies

4. Shell Programming and Scripting

awk should output if one input file doesnt have matching key

nawk -F, 'FNR==NR{a= $3 ;next} $2 in a{print $1, 'Person',$2, a}' OFS=, filea fileb Input filea Input fileb output i am getting : (2 Replies)
Discussion started by: pinnacle
2 Replies

5. AIX

Problem with updation of 'quota'

Hi, We have recently implemented 'quota' concept for the unix users. softlimit - 230MB hardlimit - 250MB We have applied the quota when few of users are more than the hardlimit,issue is that even though the users cleared the space, still its 'quota' was not updating properly. For some... (0 Replies)
Discussion started by: girish_satyam
0 Replies

6. Shell Programming and Scripting

check files updation

Hi All, Can anyone help to write the script to check files updation? i have files as mentioned below. which will be updated some time. i just want to check the last file is updating the data for last 15 mins or not. if its not updating i want to print NOT OK. if its updating data i want... (1 Reply)
Discussion started by: steve2216
1 Replies

7. Shell Programming and Scripting

Config file auto-updation

Hello All, I need to update my .cfg file which is used in the script for almost all runs. myfile.cfg file: var=1 var1=1 run=0 script: #! /bin/sh . /mydir/myfile.cfg echo $var"\t" $var1 exit So, the requirement is that the myfile.cfg should update every time I run the... (10 Replies)
Discussion started by: PikK45
10 Replies

8. Shell Programming and Scripting

Rsa public private key matching

Hi All, I have a requirement where i need to check if an rsa public key corresponds to a private key and hence return success or failure. Currently i am using the command diff <( ssh-keygen -y -e -f "$PRIVKEY" ) <( ssh-keygen -y -e -f "$PUBLICKEY" ) and its solving my purpose. This is in... (1 Reply)
Discussion started by: mritusmoi
1 Replies

9. UNIX for Dummies Questions & Answers

awk - Print lines if only matching key is found

I am looking to move matching lines (01 - 07) from File1 and 77 tab the matching string from File2, to File3.txt. I am almost done but - Currently, script is not printing lines to File3.txt in order. Thanks a lot. Any help is appreciated. Script I am using: awk 'FNR == NR && ! /^]*$/ {... (9 Replies)
Discussion started by: High-T
9 Replies

10. UNIX for Beginners Questions & Answers

Matching 2 files based on key

Hi all I have two files I need to match record from first file and second file on column 1,8 and and output only match records on file1 File1: 020059801803180116130926800002090000800231000245204003160000000002000461OUNCE000000350000100152500BM01007W0000 ... (5 Replies)
Discussion started by: arunkumar_mca
5 Replies
All times are GMT -4. The time now is 03:10 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy