awk - 仅匹配正整数和浮点数

时间:2016-09-21 13:55:11

标签: bash awk

我有一个.csv格式的输入文件,其中包含由管道分隔的税收发票条目。

例如:

Header--TIN | NAME | INV NO | DATE | NET | TAX | OTHERS | TOTAL
Record1-29001234768 | 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

记录的NET值,TAX值,OTHER Charges和TOTAL值列可能包含正整数或正浮点数,小数点后2-4位。

现在我的要求是通过使用awk'选中相应的'正则表达式来检查列是否符合指定的约束。 我需要将这4列与正则表达式匹配,这样如果我遇到正整数或正浮点数以外的任何数值,我需要向用户打印错误消息。

我已尝试过以下内容,但似乎无效。

if(!($5 ~ /[0-9]+/) || !($5 ~ /[0-9]+[.][0-9]+/) || ($5<=0))
    { printf("NET VALUE (Violates constraints)" }

任何人都可以使用内置函数提供正确的正则表达式或任何实现来满足我的要求吗?

1 个答案:

答案 0 :(得分:1)

听起来你的验证应该是:

$5 ~ /^[0-9]+(\.[0-9]{2,4})?$/

如果匹配,则它有效(正整数,或后跟.的数字和2到4个其他数字)。

对场地起点和终点的锚点非常重要!

正如评论中正确指出的那样,如果你想接受小数点前没有数字的数字,那么你将不得不寻找一个更复杂的正则表达式。