bash 按数字子字符串排序

bash 按数字子字符串排序

在 bash shell 中,我尝试按每行末尾的数字值排序(按数据包数量排序)尝试使用“sort -k6 -t '=' -n但没有效果。

输入:

type udp ip src=192.168.2.173 dport=53 packets=1
type udp ip src=192.168.2.168 dport=53 packets=1
type udp ip src=192.168.2.173 dport=53 packets=1
type udp ip src=192.168.2.170 dport=53 packets=560
type udp ip src=192.168.2.173 dport=53 packets=1
type udp ip src=192.168.2.175 dport=53 packets=1
type udp ip src=192.168.2.173 dport=53 packets=11
type udp ip src=192.168.2.178 dport=53 packets=1
type udp ip src=192.168.2.162 dport=53 packets=23
type udp ip src=192.168.2.173 dport=53 packets=75
type udp ip src=192.168.2.173 dport=53 packets=7
type udp ip src=192.168.2.173 dport=53 packets=100
type udp ip src=192.168.2.173 dport=53 packets=1
type udp ip src=192.168.2.173 dport=53 packets=200
type udp ip src=192.168.2.162 dport=7777 packets=75

答案1

您选择=作为字段分隔符。每行恰好有三个分隔符,因此“每行末尾的数值”是字段编号 4。

这些是字段:

type udp ip src=192.168.2.162 dport=7777 packets=75
111111111111111 2222222222222222222 333333333333 44

所以:

sort -k4 -t '=' -n

或者,您可以选择空格作为分隔符,那么该字段确实是 6,但您需要告诉sort从该字段的第 9 个字符开始。

type udp ip src=192.168.2.162 dport=7777 packets=75
1111 222 33 44444444444444444 5555555555 6666666666
                                         123456789…

因此这也将起作用:

sort -k6.9 -t ' ' -n

相关内容