bash - 按 bash 中的所有字段进行数字排序
问题描述
我有一个文件,其中有多个数字,每行用逗号分隔:
1,13,2,5
1,3
2,3,24
1,13,2,6
这只是一个小示例文件。在真实文件中,每一行可能有数百个数字。
这些如何按字段进行数字排序?结果应该是:
1,3
1,13,2,5
1,13,2,6
2,3,24
我试过sort -n -t,
了,但是将行作为数字进行比较,产生了错误的结果。
解决方案
这实际上是一个非常微妙的问题,与sort
处理数字字段的方式有关。结果是您需要明确告诉sort
对每个关键字段进行数字排序:
sort -t, -k1,1n -k2,2n -k3,3n -k4,4n
如果你不这样做,info
GNU 的部分会sort
稍微解释一下,
sort
将使用从 [first] 字段开始并延伸到行尾的所有字符作为主数字键。对于大多数应用程序,将跨越多个字段的键视为数字不会达到您的预期。
它巧妙地总结了你所看到的!
显然,显式指定键会使sort
在每行具有任意长数字列表的文件上使用不方便。作为 hack,您可以尝试使用 GNUsort
的版本排序选项,-V
.
sort -V
这似乎对您的特定数据做了正确的事情。我已经sort -V
在 600 个数字的行上进行了测试,它工作正常。
推荐阅读
- r - 如何在 Windows 中调试(逐行)Rcpp 生成的代码?
- python - 绘制变量之间的关系 - Python
- php - 请问这个保证上传的文件有图片后缀吗
- javascript - 使用存档器创建内存中的 .zip,然后将此文件发送到节点服务器上的 koa 客户端
- python - 设置本地 db2 服务器以从 python 进行无密码访问
- java - Vaadin 为什么我的 setvisible 不起作用?始终显示设计
- c# - LINQ ArgumentException 由于 AnonymousObject
- android - 此处不允许包含元素
- java - 尝试在 Android 设备上检索位置...适用于模拟器,但不适用于真实设备
- php - 在 WooCommerce 中为购物车费用设置零税率