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

Unexpected character when running one-liner on Windows

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

经过一番搜索,我在Whosebug上找到了下面的代码,据说它提供了我想要的高效解决方案:

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

如果相关的话,我的话使用字母和数字,并由一个白色分隔 space。

您可能正在使用 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 所建议的那样。另一种选择是使用 \".

转义引号