如何计算代码中的单词或标记?

问题描述 投票:0回答:2

有各种各样的工具可以计算文件或目录树中的代码行数。还有统计纯文本文件中单词的工具(

wc
)。

不过,我将如何计算代码行中的单词或标记?如果不使用像 tree-sitter 这样的通用编程语言解析机制来编写我自己的完整程序,这是否可行?更具体地说,我可以使用 shell 工具或简单的(ish)脚本来做到这一点吗?

shell word-count lines-of-code cloc
2个回答
1
投票

文件

$ 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}'

0
投票

文件中的令牌总数

另一个

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

如果您还有其他问题,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.