以下に示すように、数値または英数字データを含む列Aと列Bを含むCSVがあります。次の場合は、列を作成する必要があります。
- 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