加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – unix排序为2个字段的数字顺序

发布时间:2020-12-15 21:51:22 所属栏目:安全 来源:网络整理
导读:我需要使用unix排序对一些数据进行排序,但我无法确切地说出正确的语法,数据看起来像 3.9.1 Step 10:3.9.1 Step 20:3.8.10 Step 20:3.10.2 Step 10:3.8.4 Step 90:3.8.4 Step 100:3.8.4 Step 10: 我想首先使用主要号码,然后是步骤号码,例如,上面排序的数据看
我需要使用unix排序对一些数据进行排序,但我无法确切地说出正确的语法,数据看起来像

3.9.1 Step 10:
3.9.1 Step 20:
3.8.10 Step 20:
3.10.2 Step 10:
3.8.4 Step 90:
3.8.4 Step 100:
3.8.4 Step 10:

我想首先使用主要号码,然后是步骤号码,例如,上面排序的数据看起来像.

3.8.4 Step 10:
3.8.4 Step 90:
3.8.4 Step 100:
3.8.10 Step 20:
3.9.1 Step 10:
3.9.1 Step 20:
3.10.2 Step 10:

我找到了按此网站上的第一个数字排序的方法:

sort -t. -k 1,1n -k 2,2n -k 3,3n

但我现在正在努力排序第3列步骤编号,而不会打扰第一类

解决方法

有一篇关于重新设计Unix排序的文章(“构建工作排序常规的理论与实践”,JP Linderman,AT& T贝尔实验室技术期刊,1984年10月),遗憾的是,互联网上没有这篇文章.,AFAICT(我看了一年左右之前并没有找到它;我刚看了一遍,可以找到它的参考,但不是文章本身).除此之外,文章还证明了对于Unix排序,比较时间远远超过了移动数据的成本(当您考虑比较必须比较每行确定的字段时,这并不是很令人惊讶,但移动’数据’只是一个问题切换指针).其中一个结果就是他们建议做 danfuzz建议的事情;映射键使比较变得容易.他们表明,即使是简单的脚本解决方案也可以节省时间,而使排序工作变得非常困难.

因此,您可以考虑使用不太可能自然地出现在数据文件中的字符(例如Control-A)作为关键字段分隔符.

sed 's/^([^.]*)[.]([^.]*)[.]([^ ]*) Step ([0-9]*):.*/1^A2^A3^A4^A&/' file |
sort -t'^A' -k1,1n -k2,2n -k3,3n -k4,4n |
sed 's/^.*^A//'

第一个命令是艰难的命令.它标识4个数字字段,并输出由所选字符分隔的字母(在上面写入^ A,键入为Control-A),然后输出原始行的副本.然后排序在前四个字段上以数字方式工作,最后的sed命令从每行的前面剥离并包括最后一个Control-A,再次返回原始行.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读