在 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 所建议的那样。另一种选择是使用 \"
.
转义引号
我想生成一个输出文件,显示输入文件中每个单词的出现频率。经过一番搜索,我发现 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 所建议的那样。另一种选择是使用 \"
.