From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Russell Evans" Subject: Re: Stupid programming question Date: Wed, 19 May 2004 15:03:02 -0700 Sender: linux-admin-owner@vger.kernel.org Message-ID: <20040519150302.21cec504@downtown> References: <40AB940A.3080601@ashevillemail.com> Mime-Version: 1.0 Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <40AB940A.3080601@ashevillemail.com> List-Id: Content-Type: text/plain; charset="us-ascii" To: linux-admin@vger.kernel.org On Wed, 19 May 2004 12:06:18 -0500 "Michael French" 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