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.

up vote 24 down vote accepted

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

  • Tried it and works flawlessly – Gert Nov 18 '10 at 13:46

One option is to flip the columns:

$ find -maxdepth 1 -type d | while read -r dir; do printf "%d\t%s\n" "`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

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.