1753448 Members
4708 Online
108794 Solutions
New Discussion юеВ

Sort by a column

 
SOLVED
Go to solution
haeman
Frequent Advisor

Sort by a column

I have a file like below , there are three columns , I want to sort it by dept , can advise what can i do ?

user username dept
===== ======== ====
user1 username1 dept1
user2 username2 dept4
user3 username3 dept2
user4 username4 dept3
user5 username5 dept1
user6 username6 dept3
user7 username7 dept2
user8 username8 dept4
user9 username9 dept2
user10 username10 dept1


The result that I want :

dept1
user username
===== ========
user1 username1
user5 username5
user10 username10

dept2
user username
===== ========
user3 username3
user7 username7
user9 username9

dept3
user username
===== ========
user4 username4
user6 username6


dept4
user username
===== ========
user2 username2
user8 username8
2 REPLIES 2
Dennis Handly
Acclaimed Contributor

Re: Sort by a column

You need to pass it through sort:
$ sort -k3,3 file

If you want all that fancy formating, you need to write yourself a COBOL program. ;-)

tail +3 file | sort -k3,3 | awk '
BEGIN {last = "" }
{
if ($3 != last) {
if (NR != 1) print ""
print $3
print "user username"
print "===== ========"
last = $3
}
print $1, $2
}'

Note: since sort is sorting by strings, you get this order:
user1 username1
user10 username10
user5 username5
Peter Nikitka
Honored Contributor
Solution

Re: Sort by a column

Hi,

like Dennis' said: first sort, then format.
When sorting, include the first column as well, to get the usernames of each depX in alphabetical order:
sort -k 3,3 -k 1,1

mfG Peter
The Universe is a pretty big place, it's bigger than anything anyone has ever dreamed of before. So if it's just us, seems like an awful waste of space, right? Jodie Foster in "Contact"