用wc统计每一行的字符数

用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 -mwc -l计算换行符,那么为什么还要wc -m计算换行符呢?

答案1

wc计数整个文件;您可以使用awk逐行处理(不计算行分隔符):

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

或者 asawk主要是以下的超集grep

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

(请注意,某些awk实现报告字节数(如wc -c)而不是字符数(如wc -m),而其他实现将计算除字符之外不构成有效字符一部分的字节(而wc -m在大多数实现中会忽略它们) ))

答案2

这是另一种方法。

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

输出:

3
3
4

答案3

您可以迭代输出行并wc为每个输出行运行:

echo -e foo\\nbar\\nbazz | \
grep -i ba | \
while read LINE; do echo $LINE | wc -m; done

如果您不想计算换行符,可以将其删除:

echo -e foo\\nbar\\nbazz | \
grep -i ba | \
while read LINE; do echo ${LINE::-1} | wc -m; done

(上面假设在后面一行之后有一个换行符,因此如果最后一行不包含尾随换行符,则计数将关闭。)

相关内容