使用 awk 检查 csv 中的两列是否完全是数字

使用 awk 检查 csv 中的两列是否完全是数字

我有一个包含 A 列和 B 列的 csv,如下所示,其中包含数字或字母数字数据。我需要编写 C 列,如果,

  • A 或 B 为空 -> 在 C 中写入“错误”
  • A 或 B 不是数字 -> 在 C 中写入“错误”
  • A & B 是数字且 A!=B -> 在 C 中写入“不匹配”
  • A & B 是数字,A=B -> 在 C 中写入“Match”。

我的代码如下,无法正常工作。请帮助我。

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 

答案1

修复输入中的空格后,您可以使用:

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

相关内容