unix排序问题

时间:2013-05-14 13:26:57

标签: 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列。

关于第二列,我想sort这个文件,即有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美元然后排序,它可以正常工作!

2 个答案:

答案 0 :(得分:4)

这一行应该适合你:

sort -t, -n  -k2,2 test
  • 您不需要cat test|sort,只需sort file
  • -k的默认END POS是行尾。所以,如果你sort -k2,它意味着从第二个字段到第一个字段的排序。实际上你需要按完全排序第二个字段。这也解释了为什么你的排序有效,如果你删除了第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

答案 1 :(得分:2)

这是一个有效的解决方案:

cat test.file | sort -t, -k2n,2

说明:

-t,    # Set field separator to ','

-k2n,2 # sort by the second column, numerical