2

次の構文エラーについて教えてください。「if」の後に 1 つのステートメントがある場合、プログラムは機能します。しかし、「if」の後に 2 つのステートメントが必要な場合、エラーが発生します。ありがとう、カール。

BEGIN { FS = “,” }
{ if ( $2 == “” && ( $6 == “Install” || $6 == “Add” || $6 == “New”) )
{
print $1″,”$2″,”$3″,”$4″,”$5″,”$6″,”$7″,”$8″,”$9 > “Email_Asset_Add” ;
print “$8″,”$9 > “Email_Asset_Add_Mitul” ;
}
else if ( $2 == “” && ( $6 == “Change” || $6 == “Update” || $6 == “Existing”) )
{
print $1″,”$2″,”$3″,”$4″,”$5″,”$6″,”$7″,”$8″,”$9 > “Email_Asset_Update” ;
print “$8″,”$9 > “Email_Asset_Update_Mitul” ;
}
}

awk -f awk_program test_email awk: 23 行目付近の文字列の改行 awk: 28 行目付近の文字列の改行

4

1 に答える 1

2

を使用してコードを簡素化することをお勧めしますprintf()

たとえば、次のようになります。

print $1”,”$2”,”$3”,”$4”,”$5”,”$6”,”$7”,”$8”,”$9 > “Email_Asset_Add” ;

これになる可能性があります:

printf("%s,%s,%s,%s,%s,%s,%s,%s,%s\n", $1,$2,$3,$4,$5,$6,$7,$8,$9) > “Email_Asset_Add”;

物事がそのようにどこにあるかをはるかに簡単に確認できます。

実際、少しリファクタリングするだけで、すべてを行うことができます。

BEGIN {
  FS = “,”;
}

{
  if ( $2 == “” && ( $6 == “Install” || $6 == “Add” || $6 == “New”) ) {
    output="Email_Asset_Add";
  } else
  if ( $2 == “” && ( $6 == “Change” || $6 == “Update” || $6 == “Existing”) ) {
    output="Email_Asset_Update";
  } else {
    next;
  }
  printf("%s,%s,%s,%s,%s,%s,%s,%s,%s\n", $1,$2,$3,$4,$5,$6,$7,$8,$9) > output;
  printf("%s,%s\n", $8,$9); > “Email_Asset_Update_Mitul” ;
}
于 2012-06-20T15:05:17.343 に答える