【问题标题】:AWK to print subnet 0.69.100.in-abc.defAWK 打印子网 0.69.100.in-abc.def
【发布时间】:2020-09-08 06:59:01
【问题描述】:

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

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

但我得到了这样的输出

0.69.[100.in-abc.def.

如何使用 awk 获取输出,如下所示

0.69.100.in-abc.def.

【问题讨论】:

  • 试试echo ['100.69.0.0/10'] | awk -F'.' '{print $3"."$2"."$1".in-abc.def."}' | tr -d '['
  • @DigvijayS Awk 完全能够删除方括号本身; sub(/\[/, "")

标签: linux unix networking awk printf


【解决方案1】:

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

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

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

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

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

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

【讨论】:

  • 或者如果您想将字段分隔符保留为 . 本身并简单地将 [ 替换为 null 然后尝试 echo ['100.69.0.0/10'] | awk -F'.' -v OFS="." '{sub(/\[/,"",$1);print $3,$2,$1,"in-abc.def."}'
  • 回显 "['100.69.0.0/10']" | awk -F"[].[']" 'BEGIN{OFS="."} {print $5,$4,$3,"in-abc.def."}' 这行得通。
  • @celcoprab,当然,感谢您的确认,祝您学习愉快。
【解决方案2】:

如何正确地做:

$ echo ['100.69.0.0/10'] | 
awk '
match($0,/([0-9]{1,3}\.){3}[0-9]{1,3}/) {           # match ip-ish looking string
    split(substr($0,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.

【讨论】:

    猜你喜欢
    • 2016-02-21
    • 2018-07-12
    • 2011-04-29
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多