아래와 같이 숫자 또는 영숫자 데이터가 포함된 열 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