linux - csv 文件的输出量格式不正确
问题描述
交易金额列的部分输出结果不正确。这是 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
这是我运行脚本后的输出:
解决方案
该awk
脚本过滤掉前导-
和所有“。” 从最后一列(金额)与
gsub(/^-|\./,"",$NF)
这将导致十进制数字按比例放大,并丢失符号。您可能想查看此命令,至少保留小数点。sprintf
由于 'd' 格式,小数部分将被命令删除。与“C”程序不同,awk 将根据需要转换任何数值(int、float)以匹配格式。
推荐阅读
- python - 使用 Tesseract 时出现符号查找错误
- angular - 当一个动作被派发时做某事
- mysql - Mysql查询以获取具有两个日期输入的from和to列之间的记录
- solr - 如何在 Bitnami 认证的 Apache Solr 上创建新内核?
- r - NA <10 连续 NA 时的插补值
- android-studio - Android Studio - 无法应用插件 [id 'com.android.application'] - Flutter
- c# - 在后台工作人员上运行的 Http 侦听器
- c# - Ocelot API Gateway - 分配微服务的最佳 url 模板?
- javascript - 使用表单上传文件
- javascript - 如何将中间件传递给express node.js中的指定路由