sort output by column

I’d like to take this command find -maxdepth 1 -type d | while read -r dir; do printf "%s:t" "$dir"; find "$dir" | wc -l; done ( from here ). which has an output of basically

./kennel:       11062
./shadow:       15449
./ccc:  9765
./journeyo:     14200
./norths:       10710

and sort it by the numbers largest to smallest. but I’m not sure how to make sort, or whatever operate on a different column.

Asked By: xenoterracide

||

One option is to flip the columns:

$ find -maxdepth 1 -type d | while read -r dir; do printf "%dt%sn" "`find "$dir" | wc -l`" "$dir"; done

Then you get output like this:

17  .
1   ./acroread_1000_1002
1   ./.ICE-unix
2   ./.X11-unix
1   ./orbit-mrozekma
2   ./ns.mrozekma.:0

You can pipe that through sort -nr to sort it the way you want. You can even pipe the sorted result through something like awk -F't' '{print $2 "t" $1}' to flip the columns back if you need them in that order

Answered By: Michael Mrozek

Pipe the lines through sort -n -r -k2.
Edited to sort from largest to smallest.

Answered By: W_Whalley
Categories: Answers Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.