他の各ベンダーに対してCSVファイルの小数列を合計しようとしています。

他の各ベンダーに対してCSVファイルの小数列を合計しようとしています。

ループ内の各ベンダーの列を合計しようとしています。私のあいまいさについてお詫び申し上げます。頑張って説明します。プロバイダ名の合計に基づいて、各プロバイダのファイルから場所10の割引金額フィールドを読み取るとします。スクリプトを実行すると、expr: non-numeric argument割引額が10進数であることを示すメッセージが表示されます。以下は、エラーを実行して受け取るスクリプトの一部です。

############################################################################ 
#THIS SECTION WILL CAT THE FILE CREATED IN THE PREVIOUS STEP AND SEARCH THE 
#SORTED FILE FOR LIKE VENDORS.  THE VENDOR E-MAIL ADDRESS IS ALSO RETREIVED 
#HERE AS IT IS AT THE END OF EACH RECORD.  WHILE THE VENDOR REMAINS THE SAME, 
#A NEW FILE IS CREATED WITH FIRST A COLUMN HEADING LINE, FOLLOWED BY THE DETAIL 
#DATA FOR THE VENDOR. ONCE THE VENDOR CHANGES OR END OF THE FILE IS REACHED, 
#THE PERL SCRIPT 'emailit.pl' IS USED TO SEND THE ILE TO THE VENDOR AS AN E-MAIL 
#ATTATCHMENT. #6 and #7 determined not needed - 12/11/2015
# 1 vendor id 2 vendor name 3 invoice id 4 invoice date  5 invoice id 6 voucher id 
# 7 payment id ref 8 payment date 9 paid amount 10 discount amount 11 backhaul freight 
#12 gross amount 13 srd deduction 14 srd percent 15 emailid 
#16 invoice period end date (maximum of 70 characters must be separated by ;
#############################################################################
#for test
export VENDOR_TEMP=/oracle/rdbms/usr/xxxxxx/scripts/temp/

echo "VENDOR_ID,VENDOR_NAME,INVOICE_ID,INVOICE_DATE,SCH_INVOICE_ID,PAYMENT_DATE,PAID_AMT,DISCOUNT_AMT,SCH_BACKHAUL_FRGHT,GROSS_AMT,DEDUCTION_AMT,SRD_PERCENT,EMAILID" > VENDOR_HDR


cat $VENDOR_FILE  | while read LINE
do
  VENDOR_NAME=`echo $LINE | awk -F, '{print $2}'`
  touch $VENDOR_TEMP/$VENDOR_NAME
  echo $LINE >> $VENDOR_TEMP/$VENDOR_NAME
done 

VENDOR_LIST=`ls $VENDOR_TEMP`


echo "if there is a vendor with two or more entries in the vendor list file you may see a mv statement that states cannot access: No such file or directory" | tee -a $Log


for VENDOR_NAME in `echo $VENDOR_LIST`
do
  DISCOUNT_TOTAL=0
  INVOICE_DATE=''
  VENDOR_ID=`awk -F, 'NR==1{print $1}' $VENDOR_TEMP$VENDOR_NAME`
  EMAIL_ADDRESS=`awk -F, 'NR==1{print $15}' $VENDOR_TEMP$VENDOR_NAME`
  INVOICE_NUMBER=$(awk -F, 'NR==1{print $16}' $VENDOR_TEMP$VENDOR_NAME)

  # Read each line of the vendor file to get the invoice date and sum invoice totals
  for f in $(cat $VENDOR_TEMP$VENDOR_NAME)
  do
      DISCOUNT_TOTAL=$(expr ${DISCOUNT_TOTAL} + $(echo $f | awk -F, '{print $10}'))
  done

  cat VENDOR_HDR $VENDOR_TEMP$VENDOR_NAME > VENDOR_TMP
  mv VENDOR_TMP $VENDOR_TEMP$VENDOR_NAME
  mv $VENDOR_TEMP$VENDOR_NAME $VENDOR_TEMP$VENDOR_NAME.csv
  if [ "$EMAIL_ADDRESS" = '' ];then
    ./send_email.pl --sub "INVALID EMAIL ADDRESS PLEASE CORRECT $VENDOR_ID $VENDOR_NAME" --rec 'emailaddresses' --file "$VENDOR_TEMP$VENDOR_NAME.csv" --total $DISCOUNT_TOTAL --date $INVOICE_DATE --invoice $INVOICE_NUMBER

   else

    ./send_email.pl --sub "$VENDOR_ID $VENDOR_NAME Schnuck Retail Deductions (SAS)" --send emailaddresses.com --rec [email protected] --file "$VENDOR_TEMP$VENDOR_NAME.csv" --total $DISCOUNT_TOTAL --date $INVOICE_DATE --invoice $INVOICE_NUMBER
  fi      


  mv $VENDOR_TEMP$VENDOR_NAME.csv $SCH_ARCHIVE/$(basename $VENDOR_TEMP$VENDOR_NAME.csv).$FILEDATE
done

以下は、読んでいるデータの例です。

 122198,ConAgra_Foods_Co,SRD122198032915,16-MAR-15,0450287,25146609,213199,27-MAR-15,3767.01,77.77,0,3844.78,0,0,emailaddress.com,29-NOV-15
 140214,Joy_Cone__Co,SRD140214032915,04-MAR-15,243395,25104588,212317,18-MAR-15,2971.16,60.64,0,3031.8,0,0,emailaddress.com;,29-NOV-15
 140214,Joy_Cone__Co,SRD140214032915,04-MAR-15,243394,25104587,212317,18-MAR-15,2363.76,48.24,0,2412,0,0,emailaddress.com,29-NOV-15
 147810,McCormick_Company,SRD147810032915,10-MAR-15,3784260,25143679,100141,18-MAR-15,17446.63,356.09,0,17802.72,0,0,emailaddress,29-NOV-15
 147810,McCormick_Company,SRD147810032915,03-MAR-15,3777825,25112108,099510,11-MAR-15,4913.94,100.3,0,5014.24,0,0,emailaddress,29-NOV-15
 147810,McCormick_Company,SRD147810032915,27-FEB-15,3775282,25098526,099330,09-MAR-15,7269.84,148.36,0,7418.2,0,0,emailaddress,29-NOV-15
 147810,McCormick_Company,SRD147810032915,26-FEB-15,3773988,25098525,099155,06-MAR-15,4611.8,94.12,0,4705.92,0,0,emailaddress,29-NOV-15
 147810,McCormick_Company,SRD147810032915,24-FEB-15,3770586,25081388,098931,04-MAR-15,9742.03,198.83,0,9940.86,0,0,emailaddress,29-NOV-15
 159605,Nestle_Waters_of_North_America,SRD159605032915,18-JAN-15,4296435,24908423,210015,04-MAR-15,8772.68,0,0,8772.68,0,0,emailaddress,29-NOV-15
 159605,Nestle_Waters_of_North_America,SRD159605032915,19-JAN-15,4397088,24908424,210015,04-MAR-15,5148,0,0,5148,0,0,emailaddress,29-NOV-15

ベストアンサー1

あなたの質問は、あいまいさと不完全さのためにほとんど答えられないままです。入力データ(要求どおり)またはコード(要求どおり)を表示しませんでした。しかし、以下の情報が漏洩した。

++ expr 0 + 496.8
expr: non-numeric argument

expr整数以外の数字(小数点を含む数字など)では機能しません。データを整数に変換するか、非整数の値を処理する電卓プログラムを使用する必要があります(bcこれは良いアプローチです)。

おすすめ記事