Sponsored Content
Top Forums UNIX for Dummies Questions & Answers Group sums by matching and then multiplying by weights Post 302935763 by Skrynesaver on Thursday 19th of February 2015 04:18:37 AM
Old 02-19-2015
While I must learn AWK "one of these days soon"(TM) the following Perl solution does the job required.
Code:
skrynesaver@busybox ~/$ cat tmp/tmp.pl
#!/usr/bin/perl
use strict;
open (my $variables,'<',"$ENV{HOME}/tmp/file2.dat");
my %var; # hashmap of variable=>weighting=>value
while (<$variables>){
    my @r=split(/\s+/,$_);
    $var{$r[0]}{$r[2]}=$r[1];
    $var{$r[0]}{$r[3]}=$r[1] * -1;
}
close($variables);
my %sum; # group=>assigned values weighting;
open (my $groups , '<',"$ENV{HOME}/tmp/file1.dat");
while(<$groups>){
    my @r=split(/\s+/,$_);
    $sum{$r[0]}+=$var{$r[1]}{$r[2]}?$var{$r[1]}{$r[2]}:0;
}
close($groups);
for my $group (sort keys %sum){
    print "$group $sum{$group}\n";
}

skrynesaver@busybox ~/$ perl tmp/tmp.pl
gr1 20
gr2 -10
gr3 -10

This User Gave Thanks to Skrynesaver For This Post:
 

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

cmos check sums

not entirely unix orientated but.... anyway i've got an old 486dx? 100 that i'll looking to turn into a unix running machine. But everytime i turn it on it comes up with and invalid CMOS checksum, after i've been into the set up and reset that it works fine, tried a new batter and that didn't sort... (1 Reply)
Discussion started by: stevox
1 Replies

2. UNIX for Dummies Questions & Answers

Doing sums

Let me explain my problem, I have a file in the following format 9602622 - User ID 01 -2 - Question number & Grade 02 - 3 03 - 7 04 - 12 05 - 9 06 - 0 9601664 - User ID 01 -2 02 - 3 03 - 7 04 - 12 05 - 9 06 - 0 I need to change the file so it looks like this 9601664 54 -... (1 Reply)
Discussion started by: Captain Woods
1 Replies

3. Shell Programming and Scripting

Error only when multiplying two numbers

Hi $ a=10 ; b=2 $ expr $a + $b 12 $ expr $a - $b 8 $ expr $a / $b 5 $ expr $a * $b expr: syntax error Any idean why I am getting this error only when multiplying two numbers. Whats the exact syntax? Thanks a lot to all in advance CSaha (5 Replies)
Discussion started by: csaha
5 Replies

4. Shell Programming and Scripting

Multiplying Floats/Decimals

Is there a way that i can get something like this to work: Number=`expr 80 \* 10.69` i.e. To multiply an integer by a decimal or a decimal by a decimal etc...? thanks (10 Replies)
Discussion started by: rleebife
10 Replies

5. Shell Programming and Scripting

matching group of words

Hi, I am stuck with a problem, will be thankful for your guidance and help. I have two files. Each line is a group of words with first word as group Id. eg. 'gp1' in File1 and 'grp1' in File2. <File1> gp1 : xyz xys3 syt2 ssx itt kty gp2 : syt2 kgk iti op2 gp3 : ppy yt5 itt sky... (11 Replies)
Discussion started by: mira
11 Replies

6. Shell Programming and Scripting

Column matching and group setting in tab demited file

Please help me with commands for the following file operations File description 5 columns in total , sorted by column 1 value First formatting, 1) Records with duplicate column 1 values are to be ignored. Just consider the first occurrence of such a record. 2) Records with (column 2 -... (3 Replies)
Discussion started by: newbie83
3 Replies

7. Programming

problem in multiplying arrays

Hi, this is my code.It's simple : there are 2 2D arrays and the multiplied to C. #include<stdio.h> #include<sys/shm.h> #include<sys/stat.h> #include<stdlib.h> main() { int *A; //A int *B; //B int *C; //C int i,j,x,k,d; int id; ... (17 Replies)
Discussion started by: giampoul
17 Replies

8. Programming

Multiplying 2D arrays using fork()

HI, i am trying to multiply 2 2D arrays (a,b) using fork. The answer will be at c. Each child have to calculate 1 row of c. The code is right, as i think of it, with no errors but i dont get the correct c array... I think there is maybe a mistake in i dimension ... Anyway, here is the code: ... (16 Replies)
Discussion started by: giampoul
16 Replies

9. UNIX for Dummies Questions & Answers

Script that sums the contents of a folder (help me)

I'm looking for a script that sums the contents of a folder, When you give a parameter to the script , i want to know the size of the directory, the number of files, number of folders, These are commands that I have already found du -s find . -type f | wc -l find . -type d | wc -ly ... (19 Replies)
Discussion started by: Roggy
19 Replies

10. Shell Programming and Scripting

Group Multiple Lines on SINGLE line matching pattern

Hi Guys, I am trying to format my csv file. When I spool the file using sqlplus the single row output is wrapped on three lines. Somehow I managed to format that file and finally i am trying to make the multiple line on single line. The below command is working fine but I need to pass the... (3 Replies)
Discussion started by: RJSKR28
3 Replies
setmaillist(1)						      General Commands Manual						    setmaillist(1)

NAME
setmaillist - create a binary mailing list SYNOPSIS
setmaillist bin tmp DESCRIPTION
setmaillist reads a mailing list from its standard input. setmaillist writes the mailing list in a binary format to tmp; it then moves tmp to bin. tmp and bin must be on the same filesystem. If there is a problem creating tmp, setmaillist complains and leaves bin alone. The binary mailing list format is portable across machines. setmaillist always creates bin world-readable. MAILING LIST FORMAT
The mailing list read by setmaillist is a series of lines. NUL bytes are not allowed. If a line begins with a dot or slash, setmaillist takes the entire line as an include file name. If a line begins with an ampersand, setmaillist takes the rest of the line as a recipient address. If a line begins with a letter or num- ber, setmaillist takes the entire line as a recipient address. Each recipient address must include a fully qualified domain name. Recipi- ent addresses longer than 800 bytes are not allowed. setmaillist ignores blank lines and lines beginning with #. It also ignores spaces and tabs at the ends of lines. For example, god@heaven.af.mil djb@silverton.berkeley.edu is a mailing list with two addresses. SEE ALSO
setforward(1), newinclude(1), printmaillist(1) setmaillist(1)
All times are GMT -4. The time now is 03:54 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy