是否可以使用 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
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
(上面假设在后面一行之后有一个换行符,因此如果最后一行不包含尾随换行符,则计数将关闭。)