我有一个包含 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