3

这更像是一个疑问而不是一个问题。

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

$ 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 美元然后排序,它工作正常!

4

2 回答 2

4

这条线应该适合你:

sort -t, -n  -k2,2 test
  • 你不需要cat test|sort,只要sort file
  • 默认的 END POS-k是行尾。所以如果你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
于 2013-05-14T13:41:18.673 回答
3

这是一个可行的解决方案:

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

解释:

-t,    # Set field separator to ','

-k2n,2 # sort by the second column, numerical
于 2013-05-14T13:32:24.907 回答