我有一个包含以下条目的文件:
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匹配吗?
答案 0 :(得分:4)
您可以使用awk:
awk -F ': *' 'function prnt() {
print a["server"] ":" a["port"]
}
NF==2 {
a[$1]=$2
next
}
{
prnt()
delete a
}
END {
prnt()
}' file
<强>解释强>
通过使用FS=': *'
,我们将每行分成2个字段。当NF==2
我们使用密钥a
(服务器或端口)和$1
作为值填充数组$2
时。 next
将转到下一条记录。
当NF==2
为false时,我们调用prnt
函数只打印数组a
中的数据。 split
会清空a
中之前保留的值。最后,我们在prnt
块中调用END
来打印最后一条数据记录。
<强>输出:强>
11.11.11.11:1111
22.22.22.22:2222