* Re: Stupid programming question
2004-05-19 17:22 JULIAN, JOHN C (AIT)
@ 2004-05-19 16:45 ` A. R. Vener
0 siblings, 0 replies; 4+ messages in thread
From: A. R. Vener @ 2004-05-19 16:45 UTC (permalink / raw)
To: linux-admin
#!/usr/bin/perl
open(FILE1, "file1") or die "cannot open file 1\n";
open(FILE2, "file2") or die "cannot open file 2\n";
while ($n1 = <FILE1> and $n2 = <FILE2>)
{
chomp $n1;
chomp $n2;
$product = $n1 * $n2;
print "$product\n";
}
}
--
Rudy
^ permalink raw reply [flat|nested] 4+ messages in thread
* Stupid programming question
@ 2004-05-19 17:06 Michael French
2004-05-19 22:03 ` Russell Evans
0 siblings, 1 reply; 4+ messages in thread
From: Michael French @ 2004-05-19 17:06 UTC (permalink / raw)
To: linux-admin
I have two text files each with a single column of numbers in them
and I want to write a script that multiplies the number on each line of
file one with the corresponding number from file two and produces a sum
of the multiplied numbers in the 2 files.. How would I do this with a
loop? This is just a small shell script, I can use perl if I need to, I
just need to know the data structure. If it was just one file, I would
do something like this:
SUM=0
NUMBER1=`cat $FILE1`
for m in $NUMBER1
do
SUM=`echo "scale=4; $SUM * $m" |bc`
done
Not exactly right, but you get the jist of it. Obviously this won't work:
SUM=0
NUMBER1=`cat $FILE1`
NUMBER2=`cat $FILE2`
for m in $NUMBER1 and n in $NUMBER2
do
SUM=`echo "scale=4; $m * $n" |bc`
done
Thanks for any help you can provide, let me know if you need more info.
Michael French
^ permalink raw reply [flat|nested] 4+ messages in thread
* RE: Stupid programming question
@ 2004-05-19 17:22 JULIAN, JOHN C (AIT)
2004-05-19 16:45 ` A. R. Vener
0 siblings, 1 reply; 4+ messages in thread
From: JULIAN, JOHN C (AIT) @ 2004-05-19 17:22 UTC (permalink / raw)
To: mfrench, linux-admin
You could read one file into an shell array then do a loop read of the
second file (like in you example) multiplying against the appropriate
array slot.
You could grab a single number from a file with sed.
Count=$( grep -c '$' file1 )
i=1
while read Num1
do
Num2=$( sed -n $i file2 )
Mul=$(( $Num1 * $Num2 ))
...
i=$(( i + 1 ))
done < file1
You can use $Count to check if you've gone beyond the end of file2.
John Julian
-----Original Message-----
From: linux-admin-owner@vger.kernel.org
[mailto:linux-admin-owner@vger.kernel.org] On Behalf Of Michael French
Sent: Wednesday, May 19, 2004 1:06 PM
To: linux-admin@vger.kernel.org
Subject: Stupid programming question
I have two text files each with a single column of numbers in them
and I want to write a script that multiplies the number on each line of
file one with the corresponding number from file two and produces a sum
of the multiplied numbers in the 2 files.. How would I do this with a
loop? This is just a small shell script, I can use perl if I need to, I
just need to know the data structure. If it was just one file, I would
do something like this:
SUM=0
NUMBER1=`cat $FILE1`
for m in $NUMBER1
do
SUM=`echo "scale=4; $SUM * $m" |bc`
done
Not exactly right, but you get the jist of it. Obviously this won't
work:
SUM=0
NUMBER1=`cat $FILE1`
NUMBER2=`cat $FILE2`
for m in $NUMBER1 and n in $NUMBER2
do
SUM=`echo "scale=4; $m * $n" |bc`
done
Thanks for any help you can provide, let me know if you need more info.
Michael French
-
To unsubscribe from this list: send the line "unsubscribe linux-admin"
in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Stupid programming question
2004-05-19 17:06 Stupid programming question Michael French
@ 2004-05-19 22:03 ` Russell Evans
0 siblings, 0 replies; 4+ messages in thread
From: Russell Evans @ 2004-05-19 22:03 UTC (permalink / raw)
To: linux-admin
On Wed, 19 May 2004 12:06:18 -0500
"Michael French" <mfrench@ashevillemail.com> wrote:
> I have two text files each with a single column of numbers in them
>
> and I want to write a script that multiplies the number on each line
> of file one with the corresponding number from file two and produces a
> sum of the multiplied numbers in the 2 files.. How would I do this
> with a loop? This is just a small shell script, I can use perl if I
> need to, I just need to know the data structure. If it was just one
> file, I would do something like this:
Putting everything into arrays makes it easy to use the values of the
data and results if you need to do something with them later.
Thank you
Russell
#!/bin/sh
### Variables ###
# First file containing column of numbers
FILE1=/path/file1
# Number of column in first file that contains numbers to be used
COLUMN1=1
# Second file containing column of numbers
FILE2=/path/file2
# Number of column in second file that contains numbers to be used
COLUMN2=1
### Declare Arrays ###
declare -a NUMBER_FILE1
declare -a NUMBER_FILE2
declare -a PRODUCT
### FUNCTIONS ###
MULTIPLY () {
# Pull a column out of two files and multiple
# Populate arrays with data and result
#
if [ -r $FILE1 ] ; then
NUMBER_FILE1=(`awk '{print $COLUMN1}' $FILE1`)
if [ -r $FILE2 ] ; then
NUMBER_FILE2=(`awk '{print $COLUMN2}' $FILE2`)
if [ ${#NUMBER_FILE1[@]} = ${#NUMBER_FILE2[@]} ] ; then
for (( x=0 ; x<${#NUMBER_FILE1[@]} ; x++ )) ; do
let PRODUCT[$x]=${NUMBER_FILE1[$x]}*${NUMBER_FILE2[$x]}
done
else
echo "Variance in data structure"
exit 1
fi
else
echo "$FIL2 is not readable"
fi
else
echo "$FILE1 is not readable"
fi
} # End MULTIPLY
### MAIN ###
MULTIPLY
echo ${PRODUCT[@]}
for (( y=0 ; y<${#PRODUCT[@]} ; y++ )) ; do
echo "${NUMBER_FILE1[$y]}*${NUMBER_FILE2[$y]}=${PRODUCT[$y]}"
done
exit 0
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2004-05-19 22:03 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-05-19 17:06 Stupid programming question Michael French
2004-05-19 22:03 ` Russell Evans
-- strict thread matches above, loose matches on Subject: below --
2004-05-19 17:22 JULIAN, JOHN C (AIT)
2004-05-19 16:45 ` A. R. Vener
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).