如何使用 Perl 计算文件中的字符、单词和行数?
使用 Perl(不使用 wc)计算文本文件的字符数、单词数和行数的好/最佳方法是什么?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
使用 Perl(不使用 wc)计算文本文件的字符数、单词数和行数的好/最佳方法是什么?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(10)
这是 Perl 代码。 计算单词数可能有些主观,但我只是说它是不是空格的任何字符串。
Here's the perl code. Counting words can be somewhat subjective, but I just say it's any string of characters that isn't whitespace.
bmdhacks 答案的一个变体可能会产生更好的结果,那就是使用 \s+ (甚至更好的 \W+)作为分隔符。 考虑字符串“The quick brown Fox”(如果不明显则附加空格)。 使用单个空白字符的分隔符将得到六个而不是四个字数。 因此,请尝试:
使用 \W+ 作为分隔符将阻止标点符号(除其他外)计为单词。
A variation on bmdhacks' answer that will probably produce better results is to use \s+ (or even better \W+) as the delimiter. Consider the string "The quick brown fox" (additional spaces if it's not obvious). Using a delimiter of a single whitespace character will give a word count of six not four. So, try:
Using \W+ as the delimiter will stop punctuation (amongst other things) from counting as words.
字数统计工具计算文本文件中的字符、单词和行数
The Word Count tool counts characters, words and lines in text files
这里。 试试这个 Unicode 版本的 wc 程序。
它跳过非文件参数(管道、目录、套接字等)。
它假定 UTF-8 文本。
它将任何 Unicode 空格视为单词分隔符。
如果文件名末尾有
.ENCODING
,它还接受备用编码,例如foo.cp1252
、foo.latin1
、foo.utf16
等。它还可以处理以各种格式压缩的文件。
它给出了段落、行、单词、字素、字符和字节的计数。
它理解所有 Unicode 换行序列。
它会警告文本文件损坏并出现换行错误。
这是运行它的示例:
开始吧:
}
Here. Try this Unicode-savvy version of the wc program.
It skips non-file arguments (pipes, directories, sockets, etc).
It assumes UTF-8 text.
It counts any Unicode whitespace as a word separator.
It also accepts alternate encodings if there is a
.ENCODING
at the end of the filename, likefoo.cp1252
,foo.latin1
,foo.utf16
, etc.It also work with files that have been compressed in a variety of formats.
It gives counts of Paragraphs, Lines, Words, Graphemes, Characters, and Bytes.
It understands all Unicode linebreak sequences.
It warns about corrupted textfiles with linebreak errors.
Here’s an example of running it:
Here ya go:
}
我在谷歌搜索字符计数解决方案时偶然发现了这一点。
诚然,我对 perl 几乎一无所知,所以其中一些可能是错误的,但这里是我对 newt 解决方案的调整。
首先,无论如何都有一个内置的行计数变量,所以我就使用了它。 我想这可能会更有效率一些。
事实上,字符计数包括换行符,这可能不是你想要的,所以我删掉了 $_。
Perl 还抱怨 split() 的完成方式(隐式拆分,请参阅:为什么 Perl 抱怨“不推荐使用隐式分割到@_”?)所以我对此进行了调整。
我的输入文件是 UTF-8,所以我这样打开它们。 这可能有助于在包含非 ASCII 字符的输入文件中获得正确的字符计数。
这是代码:
I stumbled upon this while googling for a character count solution.
Admittedly, I know next to nothing about perl so some of this may be off base, but here are my tweaks of newt's solution.
First, there is a built-in line count variable anyway, so I just used that. This is probably a bit more efficient, I guess.
As it is, the character count includes newline characters, which is probably not what you want, so I chomped $_.
Perl also complained about the way the split() is done (implicit split, see: Why does Perl complain "Use of implicit split to @_ is deprecated"? ) so I tweaked that.
My input files are UTF-8 so I opened them as such. That probably helps get the correct character count in the input file contains non-ASCII characters.
Here's the code:
有一个 Perl Power Tools 项目,其目标是重建所有 Unix bin 实用程序,主要用于那些运行在没有 Unix 的操作系统上的用户。 是的,他们确实wc。 虽然实现有些过分,但它POSIX 兼容。
当您查看 true。
There is the Perl Power Tools project whose goal is to reconstruct all the Unix bin utilities, primarily for those on operating systems deprived of Unix. Yes, they did wc. The implementation is overkill, but it is POSIX compliant.
It gets a little ridiculous when you look at the GNU compliant implementation of true.
不认真的回答:
Non-serious answer:
以固定大小的块读取文件可能比逐行读取更有效。
wc
二进制文件执行此操作。Reading the file in fixed-size chunks may be more efficient than reading line-by-line. The
wc
binary does this.为了能够计算字符而不是字节,请考虑以下内容:
(尝试使用中文或西里尔字母并以utf8保存文件)
To be able to count CHARS and not bytes, consider this:
(Try it with Chinese or Cyrillic letters and file saved in utf8)
这可能对 Perl 初学者有帮助。
我尝试模拟 MS 字数统计功能,并添加了一项在 Linux 中使用 wc 时未显示的功能。
以下是 url:计算文件中的单词、字符和行
This may be helpful to Perl beginners.
I tried to simulate MS word counting functionalities and added one more feature which is not shown using wc in Linux.
Here is the url: Counting words,characters and lines in a file