我在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
任何人都可以帮我这个吗?
答案 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。