## 8.13. Counting Files by Types

I use awk (Section 20.10) a lot. One of my favorite features of awk is its associative arrays. This means awk can use anything as an index into an array. In the next example, I use the output of the file (Section 12.6) command as the index into an array to count how many files there are of each type:

`xargs` Section 28.17

>     #!/bin/sh
>     # usage: count_types [directory ...]
>     # Counts how many files there are of each type
>     # Original by Bruce Barnett
>     # Updated version by yu@math.duke.edu (Yunliang Yu)
>     find ${*-.} -type f -print | xargs file |
>     awk '{
>             $1=NULL;
>             t[$0]++;
>     }
>     END {
>             for (i in t) printf("%d\t%s\n", t[i], i);
>     }' | sort -nr   # Sort the result numerically, in reverse

The output of this might look like:

>     38  ascii text
>     32  English text
>     20  c program text
>     17  sparc executable not stripped
>     12  compressed data block compressed 16 bits
>     8   executable shell script
>     1   sparc demand paged dynamically linked executable
>     1   executable /bin/make script

-- BB

Copyright © 2003 O'Reilly & Associates. All rights reserved.