awk를 사용하여 csv의 두 열이 모두 숫자인지 확인

awk를 사용하여 csv의 두 열이 모두 숫자인지 확인

아래와 같이 숫자 또는 영숫자 데이터가 포함된 열 A와 열 B를 포함하는 CSV가 있습니다. 다음과 같은 경우 C열을 작성해야 합니다.

  • A 또는 B가 비어 있음 -> C에 "error" 쓰기
  • A 또는 B는 숫자가 아닙니다. -> C에 "error"라고 씁니다.
  • 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 

답변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

관련 정보