web-dev-qa-db-ja.com

wcで各行の文字を数える

合計文字数ではなく、wcを使用して各行の文字数をカウントすることはできますか?

例えば.

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

戻り値:

bar
bazz

では、なぜecho -e foo\\nbar\\nbazz | grep ba | wc -mがそれらの単語の長さのリストを返さないのでしょうか? (3と4)

提案?

PS:なぜwc -mで改行がカウントされるのですか? wc -lは改行を数えるので、なぜwc -mも改行する必要があるのですか?

1
sclaes

wcはファイル全体をカウントします。 awkを使用して、行ごとに処理できます(行区切り文字はカウントしません)。

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

またはawkは、ほとんどがgrepのスーパーセットです。

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

(一部のawk実装は、文字数(wc -cなど)ではなくバイト数(wc -mなど)を報告し、他の実装は部分を形成しないバイトをカウントします文字に加えて有効な文字の数(wc -mはほとんどの実装でそれらを無視します)

7
JJoao

これを行う別の方法を次に示します。

for line in $(echo -e foo\\nbar\\nbazz); do echo ${#line}; done

出力:

3
3
4
1
MD6380