有各种各样的工具可以计算文件或目录树中的代码行数。还有统计纯文本文件中单词的工具(
wc
)。
不过,我将如何计算代码行中的单词或标记?如果不使用像 tree-sitter 这样的通用编程语言解析机制来编写我自己的完整程序,这是否可行?更具体地说,我可以使用 shell 工具或简单的(ish)脚本来做到这一点吗?
$ cat file
foo bar base base
lorem ipsum doloris
qux aze qwe base
$ perl -snE '$c += s/\bbase\b/$&/g;END{say $c}' file
3
for word in $(< file); do
[[ $word == base ]] && ((c++))
done
echo "$c"
printf '%s\n' $(< file) | grep -wc base
tr ' ' $'\n' < file | awk '$1=="base"{c++}END{print c}'
文件中的令牌总数
另一个
awk
解决方案是简单地将字段数与默认FS
相加并使用END
规则显示结果,例如
awk '{ n += NF } END { print "tokens: " n }' file
示例使用/输出
无耻地借用例子
file
@Gilles的内容回答:
$ cat file
foo bar base base
lorem ipsum doloris
qux aze qwe base
你会:
$ awk '{ n += NF } END { print "tokens: " n }' file
tokens: 11
每行代币
如果每行的标记是你所追求的,你可以简单地为每一行输出
FNR
(文件记录号)和NF
(字段数),例如
awk '{ printf "line %d: %d tokens\n", FNR, NF }' file
示例使用/输出
$ awk '{ printf "line %d: %d tokens\n", FNR, NF }' file
line 1: 4 tokens
line 2: 3 tokens
line 3: 4 tokens
如果您还有其他问题,请告诉我。