2016-05-06 42 views
1

我有這樣的條目文件:順序無關的替代

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匹配嗎?

回答

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我們使用密鑰$1(服務器或端口)和$2作爲值填充數組anext將移至下一條記錄。

NF==2爲false時,我們調用prnt函數僅僅打印來自數組a的數據。 split將清空先前在a中保存的值。最後我們在END塊中調用prnt來打印數據的最後一個記錄。

輸出:

11.11.11.11:1111 
22.22.22.22:2222 
+0

@TomBarthe:這篇對你的工作? – anubhava