在Windows上运行单线时出现意外字符

时间:2019-05-20 19:49:27

标签: perl frequency-distribution

我想生成一个输出文件,该文件显示输入文件中每个单词的出现频率。经过一番搜索,我发现Perl是解决此问题的理想语言,但我不知道该语言。

经过更多搜索后,我在stackoverflow上找到了以下代码,据信它可以高效地提供我想要的解决方案:

perl -lane '$h{$_}++ for @F; END{for $w (sort {$h{$b}<=>$h{$a} || $a cmp $b} keys %h) {print "$h{$w}\t$w"}}' file > freq

我尝试使用以下形式运行此命令行:

perl -lane 'code' input.txt > output.txt

由于意外的'>'(位于'<=>'的那个),执行暂停。我做了一些研究,但不明白哪里出了问题。 有人能启发我吗?谢谢!

这里是我获得代码的主题: Elegant ways to count the frequency of words in a file

如果有意义,我的单词会使用字母和数字,并用一个空格隔开。

1 个答案:

答案 0 :(得分:5)

您可能正在使用Windows。因此,您需要在代码周围使用双引号"而不是单引号'

perl -lane "$h{$_}++ for @F; END{for $w (sort {$h{$b}<=>$h{$a} || $a cmp $b} keys %h) {print qq($h{$w}\t$w)}}" file > freq

此外,请注意我如何在代码中使用qq()而不是"...",如@mob所建议。另一种选择是使用\"来排除引号。