Answers:
cut -d, -f3 | tr -d '\n' | wc -m
(请记住,wc -c
计数是字节,而不是字符:
$ echo a,1,españa,2 | cut -d, -f3 | tr -d '\n' | wc -c
7
$ echo a,1,españa,2 | cut -d, -f3 | tr -d '\n' | wc -m
6
)
wc
字符数,这就是为什么我展示了如何wc
在这种情况下使用的原因。
awk -F, '{sum+=length($3)}; END {print +sum}' file
awk
设计用于逐行处理基于列的文件。该问题非常适合该工具。
0
在输入文件为空时打印而不是空行。
awk
在典型的Unix精神中让3个基本实用程序(同时使用一个大小的一个)与案例配合使用(同时工作)来实现。您可能会注意到cut + tr + wc一种是5种类型的,其速度是该awk一种本身的5倍perl
。(至少在我的系统上,在UTF8语言环境中,尝试使用100MB文件)。
一个perl
解决方案:
perl -Mopen=:locale -F, -anle '$sum += length($F[2]); END{print $sum}' file
或更短的版本:
perl -Mopen=:locale -F, -anle '$sum += length($F[2])}{print $sum' file
-Mopen=:locale
为perl
使用的字符是用户/系统的定义,否则它假定字符是字节。尝试a,1,españa,2
使用UTF-8语言环境(大多数系统中的默认设置)的输入。
使用sed
和awk
sed 's/.*,.*,\(.*\),.*/\1/g' file | awk -v FS="" '{print NF;}'
例:
$ (echo abd,123,egypt,78; echo cde,456,england,45;) | sed 's/.*,.*,\(.*\),.*/\1/g' | awk -v FS="" '{print NF;}'
5
7
两个awk的
awk -F, '{print $3}' file | awk -v FS="" '{print NF;}'
例:
$ (echo abd,123,egypt,78; echo cde,456,england,45;) | awk -F, '{print $3}'| awk -v FS="" '{print NF;}'
5
7
wc
命令获取输出!”