【问题标题】:Order-independent substitution与顺序无关的替换
【发布时间】:2016-05-06 08:10:35
【问题描述】:
我有一个包含如下条目的文件:
server: 11.11.11.11
port: 1111
port: 2222
server: 22.22.22.22
每个条目由一个空行分隔。有时,port 和 server 的顺序会颠倒(如示例中所示)。
我想重组这个文件以获得:
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 作为值填充数组a。 next 将移至下一条记录。
当NF==2 为假时,我们调用prnt 函数来打印数组a 中的数据。 split 将清空 a 中先前保存的值。最后我们在END块中调用prnt来打印最后一条数据记录。
输出:
11.11.11.11:1111
22.22.22.22:2222