awk的语法错误

时间:2013-12-16 17:45:32

标签: awk

我在使用awk编程语言时遇到了一些语法问题。我试过了:

$ awk '{if (NR==FNR) a[$2]; else if !($2 in a ) {print $2} }' file1 file2 > file3

我收到了以下错误消息:

awk: {if (NR==FNR) a[$2]; else if !($2 in a ) {print $2} }

awk:                              ^ syntax error

awk: {if (NR==FNR) a[$2]; else if !($2 in a ) {print $2} }

awk:                                          ^ syntax error

有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

您需要在条件周围添加额外的括号:

 awk '{if (NR==FNR) a[$2]; else if (!($2 in a )) {print $2} }' 

以下是awk中If语句的完整语法:

if (CONDITION) THEN-BODY [else ELSE-BODY]

条件应始终用括号括起来

答案 1 :(得分:1)

编写脚本的正确方法是:

$ awk 'NR==FNR{a[$2];next}!($2 in a){print $2}' file1 file2

awk中,每个代码块{code}仅在前提条件为真时执行。 next语句获取输入中的下一行并重新运行脚本,有效地跳过任何其他块。

{a[$2];next}执行file1,因为这是NR==FNR{print $2}仅在我们阅读file2和{{{{}}时执行的唯一时间在$2中找到了1}}。