csv文件的输出量格式不正确

问题描述 投票:0回答:2

[交易金额]列上的某些输出结果不正确。这是csv文件:

Account number (preferred / formatted),Customer reference,Posting date,Account currency,Transaction amount
750856653,233454,1/10/2019,USD,-1888.81
750856653,233464,1/10/2019,USD,-873.49
750856653,NONREF,1/10/2019,USD,2762.3
750856653,NONREF,2/10/2019,USD,-456.53
750856653,233467,2/10/2019,USD,-2547.7

这是我的awk脚本:

Account number (preferred / formatted),Customer reference,Posting date,Account currency,Transaction amount
750-85665-3      0000233454 100119000000188881
750-85665-3      0000233464 100119000000087349
750-85665-3      0000233467 100219000000025477

金额为-2547.7美元,被重新格式化为25477,这是不正确的,应该为254770。我希望小数点后每个带有一位数字的金额末尾都有一个零(0),这样,它与登录系统时的支票金额相匹配。

       awk -v s1="      " '
         BEGIN{
         FS=","
         }
           FNR==1{
           print
               next
                 }
             $2!~/NONREF/{
           $1=substr($1,1,3)"-"substr($1,4,5)"-"substr($1,length($1))
           $2=sprintf("%010d",$2)
           split($3,array,"/")
            $3=sprintf("%02d%02d%s",array[2],array[1],substr(array[3],3))
              gsub(/^-|\./,"",$NF)
              $NF=sprintf("%012d",$NF)
             $3=$3 $NF
             print $1 s1 $2,$3
             }
            '  Input_file

这是脚本运行后的输出:

linux bash awk
2个回答
1
投票

awk脚本过滤掉前导-和ALL'。从最后一列(金额)开始,带有

 gsub(/^-|\./,"",$NF)

这将导致十进制数字按比例放大,并丢失符号。您可能要查看此命令,至少保留小数点。由于'd'格式,小数部分将由sprintf命令删除。与“ C”程序不同,awk会根据需要转换任何数值(int,float)以匹配格式。


0
投票

您能不能尝试以下操作。

awk -v s1="      " '
BEGIN{
 FS=","
}
FNR==1{
  print
  next
}
$2!~/NONREF/{
  $1=substr($1,1,3)"-"substr($1,4,5)"-"substr($1,length($1))
  $2=sprintf("%010d",$2)
  split($3,array,"/")  
  $3=sprintf("%02d%02d%s",array[2],array[1],substr(array[3],3))
  if($NF~/\./){
    $NF=$NF"0"
  }
  gsub(/^-|\./,"",$NF)
  $NF=sprintf("%012d",$NF)
  $3=$3 $NF
  print $1 s1 $2,$3
}
'  Input_file

输出将如下。

Account number (preferred / formatted),Customer reference,Posting date,Account currency,Transaction amount
750-85665-3      0000233454 100119000001888810
750-85665-3      0000233464 100119000000873490
750-85665-3      0000233467 100219000000254770
© www.soinside.com 2019 - 2024. All rights reserved.