【问题标题】:Unix sort using unknown delimiter (last column)使用未知分隔符的 Unix 排序(最后一列)
【发布时间】:2013-05-11 16:51:09
【问题描述】:

我的数据如下所示:

Adelaide Crows      5        2       3       0       450    455     460.67  8      
Essendon            5        5       0       0       622    352     955.88  20    
Fremantle           5        3       2       0       439    428     598.50  12

如您所知,空格和制表符混合在一起。我需要能够对最后一列进行降序排序。所以输出看起来像这样:

Essendon            5        5       0       0       622    352     955.88  20  
Fremantle           5        3       2       0       439    428     598.50  12 
Adelaide Crows      5        2       3       0       450    455     460.67  8      

整个数据由所有 AFL 球队组成。

使用排序如何实现这一点。我尝试使用 $ 字符从行尾开始是否正确?在对最后一列进行排序后,我还需要对倒数第二列进行排序。因此,最后一列中的任何重复数字都将在倒数第二列中排序。到目前为止的代码:

sort -n -t$'\t' -k 9,9 -k 8,8 tmp

我如何考虑足球队名称会被视为空格?

这是正在排序的文件(文件名:'tmp')sample data

【问题讨论】:

  • 我没有看到证据表明您的分隔符是制表符和空格的混合,我错过了什么?您知道 sort -n 选项(用于数字)。 -k9,9n 应该会有所帮助。祝你好运。

标签: bash unix sorting delimiter


【解决方案1】:

您可以先使用awk 将最后一个字段复制到第一个位置,然后将sort 复制到第一个字段,然后使用cut 删除第一个字段。

awk '{print($NF" "$0)}' sample.txt | sort -k1,1 -n -r -t' ' | cut -f2- -d' '

Port Adelaide       5        5       0       0       573    386     916.05  20    
Essendon            5        5       0       0       622    352     955.88  20    
Sydney Swans        5        4       1       0       533    428     681.68  16    
Hawthorn            5        4       1       0       596    453     620.64  16  
Richmond            5        3       2       0       499    445     579.68  12  
..
..

【讨论】:

  • 感谢@ravoori 易于理解的答案。我也可以轻松修改以按倒数第二列排序!谢谢。完美运行:)
猜你喜欢
  • 1970-01-01
  • 2019-12-10
  • 2012-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
  • 2017-04-23
相关资源
最近更新 更多