如何在外壳脚本中按字母顺序对第二列进行排序,然后按数字排序?

迪帕

我有一个文本文件,如下所示:

info.txt

files-550519470 19h
files-1662192679 1d
files-247106034 1d
files-1986982365 2d
files-464153317 12m
files-739420408 3d
files-77614277 3m
files-374059185 4d
files-909323637 4d
files-101830442 5d
files-1270496134 5d
files-1797797160 6d
files-812888216 7d
files-118869238 7h

我想根据第二列字母进行排序,然后在同一第二列中按数字的降序排列,然后输出应如下所示:

 files-812888216 7d
 files-1797797160 6d
 files-101830442 5d
 files-101830442 5d
 files-1270496134 5d
 files-374059185 4d
 files-909323637 4d
 files-374059185 4d
 files-909323637 4d
 files-739420408 3d
 files-1986982365 2d
 files-1662192679 1d
 files-247106034 1d
 files-550519470 19h
 files-118869238 7h
 files-464153317 12m
 files-77614277 3m

我可以通过下面的命令根据数字反转,但无法弄清楚字母。有人可以建议吗?

 sort -r -nk2 info.txt
w

使用装饰,排序,未装饰模式:

$ sort -t $'-' -k 2 file | 
sed -E 's/(.*) ([[:digit:]][[:digit:]]*)([dmh]$)/\2 \3 \1 \2\3/' | 
awk 'BEGIN{arr["m"]=1; arr["h"]=60; arr["d"]=60*24}
     {$2=$1*arr[$2]; $1=""; print}' | 
sort -s -k1nr |
cut -d' ' -f3-
files-812888216 7d
files-1797797160 6d
files-101830442 5d
files-101830442 5d
files-1270496134 5d
files-374059185 4d
files-374059185 4d
files-909323637 4d
files-909323637 4d
files-739420408 3d
files-1986982365 2d
files-1662192679 1d
files-247106034 1d
files-550519470 19h
files-118869238 7h
files-464153317 12m
files-77614277 3m

这应该比Bash循环快得多。如果您需要gawk更换sort更换它,可以进一步优化。sed


如果您使用GNU或BSD排序,则可以按字母顺序使用d<h<m而不进行转换:

$ sed -E 's/([^-]*)-(.*) ([[:digit:]][[:digit:]]*)([dmh]$)/\2 \4 \3 \1-\2 \3\4/' file |
sort -s -t $' ' -k2,2 -k3,3nr -k1,1 |
cut -d $' ' -f4-
# same output

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在文本上按第一列进行排序,然后用'sort'按数字进行第二排序?

如何按日期对查询结果进行排序,然后按MySQL中的特定列值排序

在Java中按长度先对数组排序,然后按字母顺序对数组进行排序

PHP高级按数字先排序,然后按字母顺序排序

按数据属性(按字母顺序,然后按数字顺序)对列表项进行排序

Postgres / ActiveRecord按字母排序,然后按数字排序?

按字段对对象数组进行排序,然后按字母顺序排序

如何按字母顺序然后按数字顺序?

在C#中,如何基于第二列而不是仅按字母顺序的值按升序对锯齿状和二维矩形数组进行排序?

按字母顺序对字符数组进行排序,然后按长度排序

在同一列上按数字排序然后按字母数字排序

C-按计数排序,然后按字母顺序

使用Python中的第二列按字母顺序对文本文件进行排序

MySQL-如何按名称排序,然后按字母数字顺序在表上排序?

Dplyr / tidyverse如何首先按可用值的数量对列进行排序,然后按字母顺序对列进行排序?

首先按字母顺序对列表进行排序,然后按数字对列表进行排序?

如何使用sort_by按字母顺序然后按数字顺序然后按特殊字符排序

如何按行长排序文件,然后按字母顺序对第二个键排序?

我想按数字降序然后按字母顺序升序对字典进行排序

排除Google表格中的某些标签,然后按字母顺序对标签进行排序

按索引对大熊猫数据框进行排序,然后按字母顺序排序

如何在Excel中按年份然后按月份对列排序进行分组?

排序多列,第二列按数字顺序排序

按值对Hashmap排序,然后按字母顺序排序

如何在C ++中从对数字进行排序到按字母顺序进行排序

按字母顺序对数据表进行字母排序,然后按R中的数字值排序

如何在Scala中按数字对中的第二对按降序对数字对列表进行排序?

如何先按字母然后按数字组合对字符串数组进行排序?

如何在数据透视表中按字母数字顺序对列数据进行排序?

TOP 榜单

  1. 1

    来自Microsoft Office加载项taskpane.js的MySQL驱动程序模块的空引用

  2. 2

    使用AWS Cognito和React的仅限Facebook / Google的登录名(无用户名/密码)

  3. 3

    创建Windows Phone 8应用并将其连接到数据库的最佳方法(最好是SQL Server)

  4. 4

    为什么Java中的System.out.println()打印到控制台?

  5. 5

    卷曲函数无法解析来自bash中变量的代理

  6. 6

    是什么在Android的consumer-rules.pro和proguard-rules.pro之间的区别?

  7. 7

    设置与Apache POI Excel表散点图标记图标的颜色

  8. 8

    将Qt Pyside2与asyncio await语法一起使用?

  9. 9

    崇高的文字+蟒蛇的蟒蛇

  10. 10

    任务':app:minifyReleaseWithR8'.java.lang.NullPointerException的执行失败(无错误消息)

  11. 11

    OpenJDK的和AdoptOpenJDK的区别

  12. 12

    大型数据集缓存到Spark内存中时,“超出了GC开销限制”(通过sparklyr和RStudio)

  13. 13

    “执行测试CMAKE_HAVE_LIBC_PTHREAD”失败实际上是什么意思?

  14. 14

    使用Core 2.2中的Identity,如何在关闭浏览器15分钟后保持会话活动?

  15. 15

    React中的ForwardRefExoticComponent和ForwardRefRenderFunction有什么区别?

  16. 16

    猫鼬查找结果,然后将字段替换为findOne

  17. 17

    如何降级Google Colab的Torch版本

  18. 18

    Keras提前停止回调错误,val_loss指标不可用

  19. 19

    如何避免VSCode中的“导入路径不能以.ts扩展名结尾”错误?

  20. 20

    Nuxt.JS:如何在页面中获取路由URL参数

  21. 21

    是否有为什么会AccessibilityManager.sInstance导致内存泄漏的一个原因?

热门标签

归档