Count the number of fields per line
From raju
Task
The task here is to count the number of fields in each line of a file. Consider for example
% cat isp.txt # Below is a sample list of isps. Each line contains two to four fields # separated by a ','. Northrop Grumman Corp., United States Thomson Reuters (legal), United States Time Warner Cable, United States Tw Telecom Holdings, United States Windstream Business, United States Raytheon Company, Arizona, United States Intel Corporation, California, United States Rcn, New York, United States Peak 10, South Carolina, United States Charter Communications, Birmingham, Alabama, United States Google, Mountain View, California, United States Comcast Cable, Brewster, New York, United States Optimum Online, Bronx, New York, United States Choopa Llc, Miami, Florida, United States Quadranet, Miami, Florida, United States
We want to get the distribution of isp entries by the number of fields. That is we want to know how many lines have just two fields, how many have three and how many have four etc.,
Solution
% cat isp.txt | grep -v "^$" | grep -v '^#' | awk '{print NF}' FS=, | sort | uniq -c 5 2 4 3 6 4
which shows that there 5 lines with two fields, 4 lines with 3 fields, 6 lines with 4 fields.
How the command works
grep -v "^$" - remvoes empty lines grep -v '^#' - removes lines starting with '#' awk '{print NF}' prints the number of fields in each line FS=, specifies the field separator uniq prints the unique values in a sorted vector -c shows the count of each unique value.