awk 表达式适用于 awk v4.0.2,但不适用于 >= 4.2.1

Jua*_*cho 1 bash ubuntu awk centos7 alpine-linux

我有这个 awk 命令:

echo www.host.com |awk -F. '{$1="";OFS="." ; print $0}' | sed 's/^.//'
Run Code Online (Sandbox Code Playgroud)

它的作用是从主机名中获取域:

host.com
Run Code Online (Sandbox Code Playgroud)

该命令适用于 CentOS 7 (awk v 4.0.2),但不适用于 ubuntu 19.04 (awk 4.2.1) 和 alpine (gawk 5.0.1),输出为:

host com
Run Code Online (Sandbox Code Playgroud)

我怎样才能修复那个 awk 表达式,让它在最近的 awk 版本中工作?

Rav*_*h13 5

对于您提供的样品,您可以尝试以下操作。这将尝试从行的第一个.到最后一个匹配正则表达式,然后在第一个点之后打印到行的最后一个。

echo www.host.com | awk 'match($0,/\..*/){print substr($0,RSTART+1,RLENGTH-1)}'
Run Code Online (Sandbox Code Playgroud)

OP 的代码修复:如果 OP 想要使用他/她自己尝试过的代码,那么以下可能会有所帮助。这里有 2 点: 1st- 我们不需要使用任何其他命令awk来处理。2nd- 我们需要在您在每一行中所做的部分中设置FS和 的值。OFSBEGIN

echo www.host.com | awk 'BEGIN{FS=OFS="."} {$1="";sub(/\./,"");print}'
Run Code Online (Sandbox Code Playgroud)