按隐藏在文件中的数值对文件中的行进行排序

unf*_*nfa 6 sort

我正在编写一个 Bash 脚本来使用f3工具测试 USB 闪存的错误。我有这样的文本(通过从f3read程序grepping 日志创建):

2017-10-25_09:30:22/sdf.log:Data LOST: 4.00 KB (8 sectors)
2017-10-25_09:30:22/sdi.log:Data LOST: 5.00 KB (10 sectors)
2017-10-25_09:30:22/sdj.log:Data LOST: 2.35 MB (4822 sectors)
2017-10-25_09:30:22/sdn.log:Data LOST: 5.00 KB (10 sectors)
2017-10-25_09:30:22/sdo.log:Data LOST: 4.00 KB (8 sectors)
2017-10-25_09:30:22/sdp.log:Data LOST: 4.00 KB (8 sectors)
2017-10-25_09:30:22/sdq.log:Data LOST: 2.00 KB (4 sectors)
2017-10-25_14:37:03/sdb.log:Data LOST: 5.00 KB (10 sectors)
2017-10-25_14:37:03/sdc.log:Data LOST: 3.00 KB (6 sectors)
2017-10-26_09:17:59/sdd.log:Data LOST: 3.00 KB (6 sectors)
2017-10-26_09:17:59/sde.log:Data LOST: 2.00 KB (4 sectors)
2017-10-26_09:17:59/sdf.log:Data LOST: 3.00 KB (6 sectors)
2017-10-26_09:17:59/sdg.log:Data LOST: 6.00 KB (12 sectors)
2017-10-26_09:17:59/sdh.log:Data LOST: 611.29 MB (1251918 sectors)
2017-10-26_09:17:59/sdi.log:Data LOST: 6.00 KB (12 sectors)
2017-10-26_09:17:59/sdl.log:Data LOST: 6.00 KB (12 sectors)
2017-10-26_09:17:59/sdo.log:Data LOST: 3.00 KB (6 sectors)
2017-10-26_09:17:59/sdp.log:Data LOST: 2.00 KB (4 sectors)
2017-10-26_09:17:59/sdq.log:Data LOST: 414.60 MB (849106 sectors)
2017-10-26_09:17:59/sdr.log:Data LOST: 65.29 MB (133712 sectors)
2017-10-26_09:17:59/sds.log:Data LOST: 5.00 KB (10 sectors)
Run Code Online (Sandbox Code Playgroud)

我想按行尾指出的坏扇区数对行进行排序。我尝试使用sort,但我不知道如何使用它的--key选项来让它做我想做的事。

我不能先剪断行,因为我需要然后提取驱动器名称(sda、sdb 等)以生成报告。

Sté*_*las 10

POSIXly,你可以这样做:

sort -t '(' -k2n < file
Run Code Online (Sandbox Code Playgroud)

也就是将字段分隔符设置为(第二个字段(或者更确切地说是从第二个字段开始的行的部分)并以数字方式排序。

或者,您可以保留第 5字段的默认字段分隔符(从非空白到空白的过渡)," (12"并使用:

sort -k5.3n < file
Run Code Online (Sandbox Code Playgroud)

(也就是,排序数值上开始与所述3线的部分RD 5的字符字段)。

对于关系,最后的排序顺序开始发挥作用,这就是整行的词汇比较(在这里可以方便地为您提供时间顺序)。

如果您想对驱动器名称的关系进行排序,则可以使用:

sort -t '(' -k2n -k1.21
Run Code Online (Sandbox Code Playgroud)

(第二密钥是开始于21行的部分ST字符,词汇比较)

  • @dessert,为什么是`sort file` 而不是`sort &lt; file`?shell 可以打开文件,不需要将它传递给 `sort`。另请参阅 [何时应该使用输入重定向?](//unix.stackexchange.com/a/70759) (3认同)

Sun*_*eep 8

使用sort -V如果该选项可用

-V, --version-sort

文本中的自然排序(版本)编号

$ <cmd> | sort -k5,5V
2017-10-25_09:30:22/sdq.log:Data LOST: 2.00 KB (4 sectors)
2017-10-26_09:17:59/sde.log:Data LOST: 2.00 KB (4 sectors)
2017-10-26_09:17:59/sdp.log:Data LOST: 2.00 KB (4 sectors)
2017-10-25_14:37:03/sdc.log:Data LOST: 3.00 KB (6 sectors)
2017-10-26_09:17:59/sdd.log:Data LOST: 3.00 KB (6 sectors)
2017-10-26_09:17:59/sdf.log:Data LOST: 3.00 KB (6 sectors)
2017-10-26_09:17:59/sdo.log:Data LOST: 3.00 KB (6 sectors)
2017-10-25_09:30:22/sdf.log:Data LOST: 4.00 KB (8 sectors)
2017-10-25_09:30:22/sdo.log:Data LOST: 4.00 KB (8 sectors)
2017-10-25_09:30:22/sdp.log:Data LOST: 4.00 KB (8 sectors)
2017-10-25_09:30:22/sdi.log:Data LOST: 5.00 KB (10 sectors)
2017-10-25_09:30:22/sdn.log:Data LOST: 5.00 KB (10 sectors)
2017-10-25_14:37:03/sdb.log:Data LOST: 5.00 KB (10 sectors)
2017-10-26_09:17:59/sds.log:Data LOST: 5.00 KB (10 sectors)
2017-10-26_09:17:59/sdg.log:Data LOST: 6.00 KB (12 sectors)
2017-10-26_09:17:59/sdi.log:Data LOST: 6.00 KB (12 sectors)
2017-10-26_09:17:59/sdl.log:Data LOST: 6.00 KB (12 sectors)
2017-10-25_09:30:22/sdj.log:Data LOST: 2.35 MB (4822 sectors)
2017-10-26_09:17:59/sdr.log:Data LOST: 65.29 MB (133712 sectors)
2017-10-26_09:17:59/sdq.log:Data LOST: 414.60 MB (849106 sectors)
2017-10-26_09:17:59/sdh.log:Data LOST: 611.29 MB (1251918 sectors)
Run Code Online (Sandbox Code Playgroud)