2

您能帮我解决以下语法错误吗?当我在“if”之后有一个语句时,程序就可以工作了。但是当我想要在“if”之后的两个语句时,我得到了错误。谢谢,卡尔。

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 回答