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

unix – 如何使用不同的字段分隔符对多个字段进行排序

发布时间:2020-12-16 01:10:49 所属栏目:安全 来源:网络整理
导读:我想在多个字段和多个字段分隔符上对文件进行排序.请帮忙.这是我的示例数据文件: $cat Data3My Text|50002/100/43My Message|50001/100/7Help Text|50001/100/7Help Message|50002/100/11Text Message|50001/100/63Visible Text|50001/100/52Invisible Text
我想在多个字段和多个字段分隔符上对文件进行排序.请帮忙.这是我的示例数据文件:
$cat Data3
My Text|50002/100/43
My Message|50001/100/7
Help Text|50001/100/7
Help Message|50002/100/11
Text Message|50001/100/63
Visible Text|50001/100/52
Invisible Text|50002/100/1

第一个字段分隔符是管道符号,第二个字段分隔符是/.我想首先在第二个字段上对这些数据进行排序,然后在其中,数据应该按照最后一个字段的排序顺序(由/分开).最后,我的排序数据应如下所示:

Help Text|50001/100/7
My Message|50001/100/7
Visible Text|50001/100/52
Text Message|50001/100/63
Invisible Text|50002/100/1
Help Message|50002/100/11
My Text|50002/100/43

通过使用sort -k2,2n -t’|’,我可以对字段2(50001/50002)进行排序,但是在该值内,我如何对最后一个字段(由/分隔)进行排序?

此数据集最简单的技巧是将第二列视为版本号.
$cat Data3 | sort -k2,2V -t'|'
Help Text|50001/100/7
My Message|50001/100/7
Visible Text|50001/100/52
Text Message|50001/100/63
Invisible Text|50002/100/1
Help Message|50002/100/11
My Text|50002/100/43

但是,根据您的输入,这并不总是有效.这将起作用,因为第二列中的值是相同的.

您可以执行fedorqui建议的操作并运行排序两次,第二次执行稳定排序.从联机帮助页:-s,– stable(通过禁用最后的比较来稳定排序)

首先对二级排序标准进行排序.然后执行稳定排序,即在主排序条件中共享相同键的行中保持排序顺序.

$cat Data3 | sort -k3,3n -t'/' | sort -k2,2n -t'|' -s
Help Text|50001/100/7
My Message|50001/100/7
Visible Text|50001/100/52
Text Message|50001/100/63
Invisible Text|50002/100/1
Help Message|50002/100/11
My Text|50002/100/43

你在这种情况下有点幸运,因为-k2,2n -t’|’将第二列“50001/100/7”视为一个数字,可能是50001.如果用逗号分隔而不是斜杠并且您在环境中使用不同的语言环境,则可能会出现奇怪的情况.例如,在我的环境中默认运行en_US.UTF-8,其行为与此类似.

$cat Data3 | tr '/' ',' | sort -k3,3n -t',' | LC_NUMERIC=en_US.UTF-8 sort -k2,2n -t'|' -s
Help Text|50001,100,7
My Message|50001,7
Invisible Text|50002,1
Visible Text|50001,52
Text Message|50001,63
Help Message|50002,11
My Text|50002,43

您期望的是:

$cat Data3 | tr '/' ',' | LC_NUMERIC=C sort -k2,7
Visible Text|50001,63
Invisible Text|50002,1
Help Message|50002,43

(编辑:李大同)

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

    推荐文章
      热点阅读