Shell – Counting the characters of each line with wc

shelltext processingwc

Is it possible to use wc to count the chars of each line instead of the total amount of chars?

e.g.

echo -e foo\\nbar\\nbazz | grep -i ba

returns:

bar
bazz

So why doesn't echo -e foo\\nbar\\nbazz | grep ba | wc -m
return a list of the lengths of those words? (3 and 4)

Suggestions?

P.S.: why are linefeeds counted with wc -m ? wc -l counts the newlines, so why should wc -m count them too?

Best Answer

wc counts over the whole file; You can use awk to process line by line (not counting the line delimiter):

echo -e "foo\nbar\nbazz\n" | grep ba | awk '{print length}'

or as awk is mostly a superset of grep:

echo -e "foo\nbar\nbazz\n" | awk '/ba/ {print length}'

(note that some awk implementations report the number of bytes (like wc -c) as opposed to the number of characters (like wc -m) and others will count bytes that don't form part of valid characters in addition to the characters (while wc -m would ignore them in most implementations))

Related Question