linux - unix排序问题

标签 linux unix sorting

这与其说是问题,不如说是疑问。

所以我有一个这样的输入文件:

$ cat test
class||sw sw-explr bot|results|id,23,0a522b36-556f-4116-b485-adcf132b6cad,20130325,/html/body/div/div[3]/div[2]/div[2]/div[3]/div/div/div/div/div/div[2]/div/div/ul/li[4]/div/img
class||sw sw-explr bot|results|id,40,30cefa2c-6ebf-485e-b49c-3a612fe3fd73,20130323,/html/body/div/div[3]/div[2]/div[3]/div[3]/div/div/div/div/div[3]/div/div/ul/li[8]/div/img
class||sw sw-explr bot|results|id,3,72805487-72c3-4173-947f-e5abed6ea1e4,20130324,/html/body/div/div[3]/div[2]/div[2]/div[2]/div/div/div/div/div/div[3]/div/div/div[2]/ul/li[20]/div/img

在 html 页面中定义元素的一种。 可以考虑逗号分隔的5列。

我想根据第二列排序此文件,即具有 23,40,3 的列。

我不确定为什么 unix sort 不工作。

这些是我尝试过的查询,令人惊讶的是没有一个给我想要的结果。

cat test | sort -nt',' -k2

cat test | sort -n -t, -k2

cat test | sort -n -t$',' -k2

cat test | sort -t"," -k2

cat test | sort -n -k2

sort 有什么我不知道的吗?

这并没有给我带来问题,因为我将列分开、排序,然后再次加入。但为什么 sort 不起作用??

注意:- 如果我删除这个文件的 $3 然后排序,它工作正常!

最佳答案

这一行应该适合你:

sort -t, -n  -k2,2 test
  • 你不需要cat test|sort,只需要sort file
  • -k 的默认 END POS 是行尾。所以如果你 sort -k2 它意味着从第二个字段到行尾排序。事实上,您需要按 exact 第二个字段排序。这也解释了为什么如果您删除了第 3 列,您的排序仍然有效。

如果用你的例子测试:

kent$  sort -t, -n  -k2,2 file
class||sw sw-explr bot|results|id,3,72805487-72c3-4173-947f-e5abed6ea1e4,20130324,/html/body/div/div[3]/div[2]/div[2]/div[2]/div/div/div/div/div/div[3]/div/div/div[2]/ul/li[20]/div/img
class||sw sw-explr bot|results|id,23,0a522b36-556f-4116-b485-adcf132b6cad,20130325,/html/body/div/div[3]/div[2]/div[2]/div[3]/div/div/div/div/div/div[2]/div/div/ul/li[4]/div/img
class||sw sw-explr bot|results|id,40,30cefa2c-6ebf-485e-b49c-3a612fe3fd73,20130323,/html/body/div/div[3]/div[2]/div[3]/div[3]/div/div/div/div/div[3]/div/div/ul/li[8]/div/img

关于linux - unix排序问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16544497/

相关文章:

regex - 在 Vi 编辑器中替换多行

linux - Docker - 访问主机/进程

linux - 安装独立于包管理器的包

c - `close(fd)` 是否破坏文件表条目和/或 vnode 表条目?

c - 为什么仅当选择数组为 3 或 7 个元素时才会发生段错误?

unix - 大于时间戳的 Grep 日志文件

c++ - 排序排列的算法

Python:根据对象的属性对对象列表进行排序

c++ - 有什么方法可以使这种排序算法具有线性时间复杂度?

windows - 正确使用 pidfile