awk if - if之后的语句

时间:2012-06-20 14:48:12

标签: awk

你能帮我解决以下语法错误吗?当我在“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行附近的字符串中的换行符

1 个答案:

答案 0 :(得分: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” ;
}