Неожиданный символ при запуске однострочной в Windows - PullRequest
0 голосов
/ 20 мая 2019

Я хочу создать выходной файл, который показывает частоту каждого слова во входном файле.После некоторого поиска я обнаружил, что 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

Выполнение останавливается из-за неожиданного '>' (тот, что в '<=> ').Я провел некоторое исследование, но не могу понять, что не так.Может ли кто-нибудь просветить меня?Спасибо!

Вот тема, откуда я взял код: Элегантные способы подсчета частоты слов в файле

Если это актуально, мои слова используют буквыи цифры и разделены одним пробелом.

1 Ответ

5 голосов
/ 20 мая 2019

Вы, вероятно, используете 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.Другим вариантом является экранирование кавычек с \".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...