Re: Stupid programming question

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 19 May 2004 12:06:18 -0500
"Michael French" <mfrench@xxxxxxxxxxxxxxxxx> 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
-
: send the line "unsubscribe linux-admin" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Newbie]     [Audio]     [Hams]     [Kernel Newbies]     [Util Linux NG]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Device Drivers]     [Samba]     [Video 4 Linux]     [Git]     [Fedora Users]

  Powered by Linux