我有一个像key=value
这样的文件,我想按升序对其进行排序。我有两种类型的机器 - 一种在abc数据中心,另一种在pqr数据中心。
p10=machineA.abc.host.com
p7=machineB.abc.host.com
p3=machineC.abc.host.com
p8=machineD.abc.host.com
p10=machineE.pqr.host.com
p7=machineF.pqr.host.com
p3=machineG.pqr.host.com
p8=machineH.pqr.host.com
所以我应该通过数据中心打印出这样的组,并按键按升序排序。这有可能做到吗?
p3=machineC.abc.host.com
p7=machineB.abc.host.com
p8=machineD.abc.host.com
p10=machineA.abc.host.com
p3=machineG.pqr.host.com
p7=machineF.pqr.host.com
p8=machineH.pqr.host.com
p10=machineE.pqr.host.com
我试过sort -n machines.txt
,但这不是我想要的方式。
答案 0 :(得分:2)
你可以做到
[namedtuple for namedtuple in list if namedtuple.id != 'id']
这会将sed 's/.\(.*\)/\1/g' inputfile | sort -t. -k2 -k1,1n | sed 's/^/p/g'
设置为字段分隔符。然后它将在文本上对第二个字段(.
)进行排序,然后在数字上对第一个字段(-k2
)进行排序。
答案 1 :(得分:0)
awk
+ sort -t'.' -k2 -k1,1V file | awk 'BEGIN{ FS=OFS="." }dc && $2 != dc{ print "" }{ dc = $2 }1'
解决方案:
-t'.'
-k2
- 字段分隔符-k1,1V
- 在第1阶段按数据中心名称排序awk -F'[=.]' '{ $0 = $1 OFS $(NF-2) OFS $0 }1' machines.txt \
| sort -k2,2 -k1,1V \
| awk 'BEGIN{ FS=OFS="." }{ sub(/^[^ ]+ [^ ]+ /, "") }dc && $2 != dc{ print "" }{ dc = $2 }1'
- 自然的键 更新:
将数据中心名称视为最后的第3个字段:
p3=machineC.abc.host.com
p7=machineB.abc.host.com
p8=machineD.abc.host.com
p10=machineA.abc.host.com
p3=machineG.pqr.host.com
p7=machineF.pqr.host.com
p8=machineH.pqr.host.com
p10=machineE.pqr.host.com
输出:
Form