как считать общее количество слов в файле?

Можно установить новую тему затмения. Я знаю, "расширил презентацию VS", которая является очень минималистической темой. Выезд: http://andrei.gmxhome.de/skins/index.html

Дополнительно можно установить полноэкранный плагин, который дает Вам некоторое небольшое дополнительное пространство. Проверьте его здесь: http://www.scharf.gr/eclipse/fullscreen/update/

Также вещь, которую Вы имеете в нижней части, левой и правой, можно просто перетащить ее к вершине на ту же панель инструментов (так в конце, у Вас просто есть один). Если они не вписываются (в зависимости от Вашего разрешения экрана), входят в Окно->, Настраивают Perspecitve... и выключают их.

This is what it looks like (without fullscreen). I'm also using editbox plugin.

18
20.08.2016, 17:29
5 ответов

Команда wc иначе. подсчет слов может сделать это:

$ wc -w <file>

пример

$ cat sample.txt
today is a 
good day


$ wc -w sample.txt
5 sample.txt


# just the number (thanks to Stephane Chazelas' comment)
$ wc -w < sample.txt
5
39
27.01.2020, 19:45
  • 1
    Отметьте это слова wc -w не имейте того же определения что касается GNU grep -w. Для wc слово является последовательностью одного или нескольких непробелов ([:space:] класс символов в текущей локали). Например, foo,bar и foo bar (с неразрывным пространством), каждое слово. попытка –  Stéphane Chazelas 12.06.2014, 18:18

Я придумал это для ПРОСТО числа:

wc -w [file] | cut -d' ' -f1

5

Я также как wc -w < [file] подход

Наконец, для хранения просто подсчета слов в переменной, Вы могли использовать следующее:

myVar=($(wc -w /path/to/file))

Это позволяет Вам пропустить имя файла изящно.

7
27.01.2020, 19:45
  • 1
    wc -w < "$file" для ПРОСТО числа. –  Stéphane Chazelas 19.06.2013, 23:24

Лучшее решение использует Perl:

perl -nle '$word += scalar(split(/\s+/, $_)); END{print $word}' filename

@Bernhard

Можно проверить исходный код wc команда от coreutils, я тестирую в своей машине с файлом subst.c в ударе 4,2 источника.

time wc -w subst.c

real    0m0.025s
user    0m0.016s
sys     0m0.000s

И

time perl -nle '$word += scalar(split(" ", $_)); END{print $word}' subst.c

real    0m0.021s
user    0m0.016s
sys     0m0.004s

Чем больше файл, тем более эффективный Perl относительно wc.

3
27.01.2020, 19:45
  • 1
    Почему это лучше, чем туалет? –  Sparr 19.06.2013, 20:13
  • 2
    @Sparr, с одной стороны, потому что, к моему очень большому удивлению, это, кажется, намного быстрее. Я попробовал его на текстовом файле с 141 813 504 словами и wc взял ~14sec, в то время как Perl взял ~5sec! –  terdon♦ 19.06.2013, 20:28
  • 3
    я думаю 'большая' проблема действительно, является ответом, который имеет зависимость от Perl, и я никогда не большой поклонник такой зависимости. Если бы вопрос был о производительности, которая была бы другой вещью. –  Michael Durrant 19.06.2013, 20:31
  • 4
    Отметьте это a split на /\s+/ похож на a split(' ') за исключением того, что любой ведущий пробел производит пустое первое поле. То различие даст Вам одно дополнительное слово (пустое первое поле, которое является), на строку связываются. Так использование (split(" ", $_)) иначе для файла, созданного как это: echo -e "unix\n linux" > testfile Ваша острота сообщает о 3 словах. –  don_crissti 19.06.2013, 21:03
  • 5
    Ваши синхронизации показывают, что туалет более быстр (это - пользователь и sys времена тот вопрос там). С LC_ALL=C, wc будет значительно более быстрым, точно так же, как с PERLIO=:utf8, perl будет значительно медленнее. –  Stéphane Chazelas 28.06.2013, 13:20

Используем AWK!

$ function wordfrequency() { awk 'BEGIN { FS="[^a-zA-Z]+" } { for (i=1; i<=NF; i++) { word = tolower($i) words[word]++ } } END { for (w in words) printf("%3d %s\n", words[w], w) } ' | sort -rn } 
$ cat your_file.txt | wordfrequency

Здесь перечисляется частота каждого слова, встречающегося в предоставляемом файле. Я знаю, что это не то, что вы просили, но это лучше! Если вы хотите увидеть вхождения вашего слова, вы можете просто сделать это:

$ cat your_file.txt | wordfrequency | grep yourword

Я даже добавил эту функцию в мой .dotfiles


Source: AWK-ward Ruby

3
27.01.2020, 19:45

Программа wc считает «слова», но это, например, не те «слова», которые многие люди увидят при просмотре файла. Программа vi , например, использует другую меру «слов», разделяя их на основе их классов символов, в то время как wc просто считает вещи , разделенные пробелами . Эти две меры могут кардинально отличаться. Рассмотрим следующий пример:

first,second

vi видит три слова ( первое и второе , а также разделяющую их запятую), а wc видит один (в этой строке нет пробелов). Есть много способов подсчета слов, некоторые из них менее полезны, чем другие.

Хотя Perl лучше подходит для написания счетчика для слов в стиле vi, вот быстрый пример с использованием sed , tr и wc ( умеренно переносимый с использованием буквального возврата каретки ^ M ):

#!/bin/sh
in_words="[[:alnum:]_]"
in_punct="[][{}\\|:\"';<>,./?\`~!@#$%^&*()+=-]"
sed     -e "s/\($in_words\)\($in_punct\)/\1^M\2/g" \
        -e "s/\($in_punct\)\($in_words\)/\1^M\2/g" \
        -e "s/[[:space:]]/^M/g" \
        "$@" |
tr '\r' '\n' |
sed     -e '/^$/d' |
wc      -l

Сравнение счетчиков:

  • Запуск сценария на самом себе дает мне 76 слов.
  • Пример на Perl от @cuonglm дает 31.
  • Использование wc дает 28.

Для справки: POSIX vi говорит:

В локали POSIX vi должен распознавать пять типов слов:

  1. Максимальная последовательность букв, цифр и знаков подчеркивания, разделенных с обоих концов. by:

    • Символы, отличные от букв, цифр или подчеркиваний

    • Начало или конец строки

    • Начало или конец буфера редактирования

  2. Максимальная последовательность символов, кроме букв, цифр и подчеркиваний , или символы, разделенные с обоих концов:

    • буква, цифра, подчеркивание
    • <пробел> символы
    • начало или конец строки
    • начало или конец буфера редактирования
  3. Одна или несколько последовательных пустых строк

  4. Первый символ в буфере редактирования

  5. Последний не- <новая строка> в буфере редактирования

3
27.01.2020, 19:45

Теги

Похожие вопросы