AWK 打印子网 0.69.100.in-abc.def

AWK to print subnet 0.69.100.in-abc.def

我的要求是将子网 100.69.0.0/10 值打印为 0.69.100.in-abc.def。 我试过如下

echo ['100.69.0.0/10'] | awk -F'.'  '{print ".""."".in-abc.def."}'

但我得到了这样的输出

0.69.[100.in-abc.def.

如何使用 awk 获取如下输出

0.69.100.in-abc.def.

很好的尝试,你很接近,尝试跟随。使用 OP 的方法,我们也需要将 [] 作为字段分隔符,以便我们可以通过 OP 准确获取所需的值。

echo ['100.69.0.0/10'] | 
awk -F"[].[']" 'BEGIN{OFS="."} {print ,,,"in-abc.def."}'

或者,如果您的 echo 正在打印 ['100.69.0.0/10'],请尝试以下操作(我们有 [].' 作为 awk 的字段分隔符):

echo "['100.69.0.0/10']" | 
awk -F"[].[']" 'BEGIN{OFS="."} {print ,,,"in-abc.def."}'

OP 代码的改进(尝试): OP 仅添加了 . 作为字段分隔符以使事情变得简单我们也可以在字段分隔符中添加 [],以便我们可以获得确切需要的值。

注意: 第一个解决方案假设 OP 的回显输出是 [100.69.0.0/10] 我认为这可能是错误的,OP 的 echo 输出可能有 '['100.69.0.0/10'](当使用 " 覆盖 echo 的输出时)在这种情况下请使用上面的第二个解决方案。

如何正确操作:

$ echo ['100.69.0.0/10'] | 
awk '
match([=10=],/([0-9]{1,3}\.){3}[0-9]{1,3}/) {           # match ip-ish looking string
    split(substr([=10=],RSTART,RLENGTH),t,/\./)         # split it on .
    printf "%s.%s.%s.in-abc.def.\n",t[3],t[2],t[1]  # printf it carefree
}'

输出

0.69.100.in-abc.def.