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 版本中工作?
对于您提供的样品,您可以尝试以下操作。这将尝试从行的第一个.
到最后一个匹配正则表达式,然后在第一个点之后打印到行的最后一个。
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
和 的值。OFS
BEGIN
echo www.host.com | awk 'BEGIN{FS=OFS="."} {$1="";sub(/\./,"");print}'
Run Code Online (Sandbox Code Playgroud)