Shell-Script
使用 awk 檢查 csv 中的兩列是否完全是數字
我有一個 csv,其中 A 列和 B 列如下,其中包含數字或字母數字數據。我需要編寫列 C,如果,
- A 或 B 為空白 -> 在 C 中寫入“錯誤”
- A 或 B 不是數字 -> 在 C 中寫入“錯誤”
- A & B 是數字和 A!=B -> 在 C 中寫“不匹配”
- A & B 是數字,A=B -> 在 C 中寫“匹配”。
我的程式碼如下,它不能正常工作。請在這裡幫幫我。
awk -F ',' ' NR==1; NR >1 {OFS=","; if ($1 ~ /^[[:space:]]*$/ || $2 ~ /^[[:space:]]*$/) print $1,$2,"Error"; else if ($1 ~ /^[[:alpha:]]+$/ || $2 ~ /^[[:alpha:]]+$/) print $1,$2,"Error"; else if ($1 == /^([[:digit:]]+)$/ && $2 == /^([[:digit:]]+)$/ && $1 != $2) print $1,$2,"Mismatch"; else if ($1 == /^([[:digit:]]+)$/ && $2 == /^([[:digit:]]+)$/ && $1 == $2) print $1,$2,"Match"; } ' ~/input.csv > ~/output.csv
樣本輸入數據:
232,2w323 343, ,454 565,677 fg66, ,ghg6 gf6,ghugyu6
修復輸入中的空格後,您可以使用:
awk ' BEGIN { OFS=FS=","} NR==1 { print; next } $1 ~ /^[[:digit:]]+$/ && $2 ~ /^[[:digit:]]+$/ { print $1,$2,($1==$2)?"Match":"Mismatch" next } { print $1,$2,"Error" } ' input.csv > output.csv
輸出:
232,2w323,Error 343, ,Error ,454,Error 565,677,Mismatch fg66, ,Error ,ghg6,Error gf6,ghugyu6,Error