我有一个.csv格式的输入文件,其中包含由管道分隔的税务发票条目。awk - 仅匹配正整数和浮点数
例如:
Header--TIN | NAME | INV NO | DATE | NET | TAX | OTHERS | TOTAL
Record1-290| A S Spares | AB012 | 23/07/2016 | 5600.25 | 200.70 | 10.05 | 5811.00
Record2-29450956221 | HONDA Spare Parts | HOSS0987 |29/09/2016 | 70000 | 2200 | 0 | 72200
记录的净值,税务价值,其他费用和总价值列可能包含正整数或正浮点数小数点后2-4位。
现在我的要求是通过检查相应的'正则表达式使用awk'来检查列是否满足指定的约束条件。 我需要使用正则表达式匹配这4列,如果我遇到除正整数或正浮点数以外的任何数值,我需要向用户打印一条错误消息。
我试过以下,但它似乎没有工作。
if(!($5 ~ /[0-9]+/) || !($5 ~ /[0-9]+[.][0-9]+/) || ($5<=0))
{ printf("NET VALUE (Violates constraints)" }
任何人都可以给正确的工作正则表达式或任何使用内置函数的实现来满足我的要求吗?
不要忘记,如果正则表达式在正在测试的字段中出现__anywhere__,那么'〜'运算符将返回true。例如:'awk'BEGIN {if(“abc8xyz”〜/ [0-9] + /)print“这是一个提示吗?” }'' – jas
您的发布输入文件中没有逗号,因此显然不是CSV。 [编辑]你的问题要么向我们展示真正的CSV输入文件,要么删除有关CSV的讨论,如果这是你真正的输入格式。 –
@Ed Morton - 我已经使用sed命令来替换所有的管道逗号以便更好地理解。它当然是一个.csv文件,它是通过使用libreoffice转换.ods文件而获得的,但是用管道替换了逗号。 –