在awk Unix中使用正则表达式的条件If语句

时间:2017-05-08 18:56:32

标签: unix if-statement awk

我在awk中使用regex的if语句有问题。 我想要做的是,如果在$ NF中有一个字母i,它将打印为Incoming,如果在$ NF值中有一个字母o,它将显示Outgoing。

以下是我正在尝试构建的命令

awk -F"/" -v var""'{ if ($NF =~ .*i) then var="Incoming" print $8 ";" $NF ";" var   elif ($NF =~ .*o) print $8 ";" $NF ";" var  }' 

我总是得到错误

awk: cmd. line:1: { if ( $NF =~ ".*i" ) {print $8 ";" $NF "; Incoming"} else print $8 ";" $NF "; Outgoing" fi }
awk: cmd. line:1:             ^ syntax error
awk: cmd. line:1: { if ( $NF =~ ".*i" ) {print $8 ";" $NF "; Incoming"} else print $8 ";" $NF "; Outgoing" fi }
awk: cmd. line:1:                                                       ^ syntax error

任何人都可以帮我这个吗?

1 个答案:

答案 0 :(得分:3)

我不确定你尝试使用哪种语言的语法,但它不是awk。以下是如何编写我想用awk写的思考的内容:

awk -F'/' -v OFS=';' '{if ($NF ~ /i/) var="Incoming"; else if ($NF ~ /o/) var="Outgoing"; else var=""; print $8, $NF, var}' file

也可能只需要这个:

awk -F'/' -v OFS=';' '{print $8, $NF, ($NF~/i/ ? "Incoming" : "Outgoing")}' file

如果这些都不是你想要的,那么编辑你的问题以包括简洁,可测试的样本输入和预期输出,以便我们为你提供帮助。

你可以从Arnold Robbins的第四版“有效的Awk编程”一书中学习awk。