Chinaunix

标题: 一個排序問題 [打印本页]

作者: rayylv    时间: 2017-04-11 15:18
标题: 一個排序問題
請問awk要如何做到這樣的排序
原始:AP-5 | -77 dBm | AP-1 | -54 dBm | AP-2 | -43 dBm

結果:AP-2 | -43 dBm | AP-1 | -54 dBm | AP-5 | -77 dBm



作者: haooooaaa    时间: 2017-04-11 15:52
  1. awk -F' +\\| +'  '{for(i=2;i<=NF;i+=2)a[$i]=$(i-1)" | "$i}END{asorti(a,b);for(i in b)s=s?s" | "a[b[i]]:a[b[i]];print s}'
复制代码

作者: rayylv    时间: 2017-04-11 16:35
我的AP數量不確定,這樣要如何改
AP-5 | -77 dBm | AP-1 | -54 dBm | AP-2 | -43 dBm | AP-8 | -40 dBm
作者: haooooaaa    时间: 2017-04-11 16:37
回复 3# rayylv

我的限定了没有? 有尝试?
作者: rayylv    时间: 2017-04-11 17:00
不好意思,它會從第二個排序
AP-5 | -77 dBm | AP-8 | -40 dBm | AP-2 | -43 dBm | AP-1 | -54 dBm
作者: jason680    时间: 2017-04-11 20:13
本帖最后由 jason680 于 2017-04-11 20:16 编辑

回复 3# rayylv

$ cat FILE
AP-5 | -77 dBm | AP-1 | -54 dBm | AP-2 | -43 dBm
AP-5 | -77 dBm | AP-1 | -54 dBm | AP-2 | -43 dBm | AP-8 | -40 dBm
AP-5 | -7 dBm | AP-1 | -7 dBm | AP-2 | -43 dBm  

$ awk -F' *[|] *' -vv=" | " '{delete a;for(n=2;n<=NF;n+=2){k=sprintf("%8d",$n);a[k]=a[k]v$(n-1)v$n}t=asorti(a,b);s=a[b[1]];for(n=2;n<=t;++n)s=s a[b[n]];sub("^ [|] ","",s);print s}' FILE
AP-2 | -43 dBm | AP-1 | -54 dBm | AP-5 | -77 dBm
AP-8 | -40 dBm | AP-2 | -43 dBm | AP-1 | -54 dBm | AP-5 | -77 dBm
AP-5 | -7 dBm | AP-1 | -7 dBm | AP-2 | -43 dBm  






欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2