【问题标题】:Order-independent substitution与顺序无关的替换
【发布时间】:2016-05-06 08:10:35
【问题描述】:

我有一个包含如下条目的文件:

server: 11.11.11.11
port: 1111

port: 2222
server: 22.22.22.22

每个条目由一个空行分隔。有时,portserver 的顺序会颠倒(如示例中所示)。

我想重组这个文件以获得:

11.11.11.11:1111
22.22.22.22:2222

是否可以对文件进行排序?我可以将此结构与 sed 或 awk 匹配吗?

【问题讨论】:

    标签: regex awk sed substitution


    【解决方案1】:

    你可以使用awk:

    awk -F ': *' 'function prnt() {
       print a["server"] ":" a["port"]
    }
    NF==2 {
        a[$1]=$2
        next
    }
    {
       prnt()
       delete a
    }
    END {
       prnt()
    }' file
    

    说明:

    通过使用FS=': *',我们将每一行分成两个字段。当NF==2 时,我们使用$1(服务器或端口)和$2 作为值填充数组anext 将移至下一条记录。

    NF==2 为假时,我们调用prnt 函数来打印数组a 中的数据。 split 将清空 a 中先前保存的值。最后我们在END块中调用prnt来打印最后一条数据记录。

    输出:

    11.11.11.11:1111
    22.22.22.22:2222
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-06
      • 2019-03-08
      • 1970-01-01
      • 2022-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-12
      相关资源
      最近更新 更多