Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

unix sorting, with primary and secondary keys

Tags:

bash

unix

sorting

I would like to sort a file on more fields. A sample tab separated file is:

a   1   1.0
b   2   0.1
c   3   0.3
a   4   0.001
c   5   0.5
a   6   0.01
b   7   0.01
a   8   0.35
b   9   2.3
c   10  0.1
c   11  1.0
b   12  3.1
a   13  2.1

And i would like to have it sorted alphabetically by field 1 (with -d), and when field1 is the same, sort by field 3 (with the -g option).

A didn't succeed in doing this. My attemps were (with a real TAB character instead of <TAB>):

cat tst | sort -t"<TAB>" -k1 -k3n
cat tst | sort -t"<TAB>" -k1d -k3n
cat tst | sort -t"<TAB>" -k3n -k1d

None of these are working. I'm not sure if sort is even able to do this. I'll write a script for workaround, so I'm just curious whether there is a solution using only sort.

like image 572
zseder Avatar asked Jul 07 '10 10:07

zseder


1 Answers

The manual shows some examples.

In accordance with zseder's comment, this works:

sort -t"<TAB>" -k1,1d -k3,3g

Tab should theoretically work also like this sort -t"\t".

If none of the above work to delimit by tab, this is an ugly workaround:

TAB=`echo -e "\t"`
sort -t"$TAB"
like image 195
Janick Bernet Avatar answered Oct 16 '22 11:10

Janick Bernet