【问题标题】:Unexpected character when running one-liner on Windows在 Windows 上运行单行时出现意外字符
【发布时间】:2019-10-07 04:46:27
【问题描述】:

我想生成一个输出文件,显示输入文件中每个单词的频率。经过一番搜索,我发现 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

如果相关,我的文字使用字母和数字,并用一个空格分隔。

【问题讨论】:

标签: perl frequency-distribution


【解决方案1】:

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

【讨论】:

  • 转义引号会起作用吗?如果没有,qq{} 语法提供了一种解决方法 (print qq[$h{$w}\t$w])。
  • @mob,我在 Windows 上试过它并且它有效,但我不确定它是否适用于所有情况。将在 ;) 中编辑您的 qq{} 建议
猜你喜欢
  • 2019-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-24
  • 1970-01-01
  • 1970-01-01
  • 2022-10-24
相关资源
最近更新 更多