You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash中按行末数值子串(数据包数量)排序的问题

Bash中按行末数值子串(数据包数量)排序的问题

嘿,我来帮你搞定这个排序问题!你之前用的sort -k6 -t '=' -n没生效,是因为分隔符选成=之后,每行的字段数根本到不了第6个,咱们一步步来解决:

问题原因分析

你用-t '='把每行按等号分割,拿其中一行举例:

type udp ip src=192.168.2.173 dport=53 packets=1

按=分割后会变成4个字段:

  1. type udp ip src
  2. 192.168.2.173 dport
  3. 53 packets
  4. 1

这时候指定-k6是无效的,因为不存在第6个字段,自然没法正确排序。

两种可行的解决方案

方案一:按等号分割,取最后一个字段排序

既然packets=是每行最后一个键值对,按=分割后的最后一个字段就是咱们要的数据包数字,直接针对这个字段做数值排序就行:

sort -t '=' -k4,4n your_input_file.txt

这里-k4,4n表示只对第4个字段进行数值排序,避免其他字段干扰。

方案二:用默认空格分割,取目标字段的数字部分排序

如果用默认的空格作为分隔符,每行的第6个字段是packets=X,咱们可以指定从这个字段的第8个字符开始排序(因为packets=占了7个字符,第8位就是数字开头):

sort -k6.8n your_input_file.txt

这个写法更简洁,不用指定分隔符,直接精准定位到数字部分做数值排序。

排序后的示例输出

执行上面任意一个命令后,输出会按数据包数量升序排列,大致是这样:

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.175 dport=53 packets=1
type udp ip src=192.168.2.178 dport=53 packets=1
type udp ip src=192.168.2.173 dport=53 packets=1
type udp ip src=192.168.2.173 dport=53 packets=7
type udp ip src=192.168.2.173 dport=53 packets=11
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.162 dport=7777 packets=75
type udp ip src=192.168.2.173 dport=53 packets=100
type udp ip src=192.168.2.173 dport=53 packets=200
type udp ip src=192.168.2.170 dport=53 packets=560

备注:内容来源于stack exchange,提问作者okoolo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 14:38:18