我有一個.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文件而獲得的,但是用管道替換了逗號。 –