Reputation: 1232
This is more of a doubt than a question.
So I have an input file like this:
$ 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
Kind of defining the element in an html page. The comma separated 5 columns can be considered.
I want to sort
this file with respect to the second column, i.e. columns having 23,40,3.
I am not sure why unix
sort
isn't working.
These are the queries I tried, surprisingly none gave me desired result.
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
Is there something about sort
that I don't know?
This didn't cause me a problem as I separated the columns, sorted, then joined again. But why did not sort
work??
NB:- If I remove $3 of this file and then sort, it works fine!
Upvotes: 3
Views: 5352
Reputation: 195029
this line should work for you:
sort -t, -n -k2,2 test
cat test|sort
, just sort file
-k
is the end of line. so if you sort -k2
it means sort from the 2nd field till the end of line. In fact you need sort by exact the 2nd field. And this also explains why your sort worked if you removed 3rd col.if test with your example:
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
Upvotes: 4
Reputation: 157947
Here comes a working solution:
cat test.file | sort -t, -k2n,2
Explanation:
-t, # Set field separator to ','
-k2n,2 # sort by the second column, numerical
Upvotes: 3