Поиск самого длинного слова в текстовом файле


Поиск самого длинного слова в текстовом файле

22.01.2012 08:11:44 Просмотров 82 Источник

Я пытаюсь сделать простой скрипт поиска самого большого слова и его числа / длины в текстовом файле с помощью bash. Я знаю, когда я использую awk его простой и прямой вперед, но я хочу попробовать и использовать этот метод...допустим, я знаю, если a=wmememememeи если я хочу найти длину, я могу использовать echo {#a}его слово я бы echo ${a}. Но я хочу применить его на этом ниже

for i in `cat so.txt` do

Где так.txt содержит слова, Я надеюсь, что это имеет смысл.

У вопроса есть решение - Посмотреть?

Ответы - Поиск самого длинного слова в текстовом файле / Finding the longest word in a text file

Rob Wouters

22.01.2012 08:18:15

longest=""
for word in $(cat so.txt); do
    if [ ${#word} -gt ${#longest} ]; then
        longest=$word
    fi
done

echo $longest
Является ответом!
Paused until further notice.

22.01.2012 08:18:27

Обычно вы хотите использовать while read, но поскольку вы хотите, чтобы все слова были разделены, в этом случае это будет работать нормально.

for i in $(cat)
jbleners

22.01.2012 08:20:28

for i in $(cat so.txt); do echo ${#i}; done | paste - so.txt | sort -n | tail -1
https://stackoverflow.com/questions/8962466/finding-the-longest-word-in-a-text-file/8962532#comment100379221_8962532
Количество слов в текстовом файле часто больше, чем количество строк в этом файле. Так paste - so.txtне будет работать надежно, если это не так.txt имеет только один столбец.
Fritz G. Mehner

22.01.2012 09:29:12

Другое решение:

for item in  $(cat "$infile"); do
  length[${#item}]=$item          # use word length as index
done
maxword=${length[@]: -1}          # select last array element

printf  "longest word '%s', length %d" ${maxword} ${#maxword}
jaypal singh

22.01.2012 11:57:04

awkскрипт:

#!/usr/bin/awk -f

# Initialize two variables
BEGIN {
  maxlength=0;
  maxword=0
} 

# Loop through each word on the line
{
  for(i=1;i<=NF;i++) 

  # Assign the maxlength variable if length of word found is greater. Also, assign
  # the word to maxword variable.
  if (length($i)>maxlength) 
  {
    maxlength=length($i); 
    maxword=$i;
  }
}

# Print out the maxword and the maxlength  
END {
  print maxword,maxlength;
}

Текстовый файл:

[jaypal:~/Temp] cat textfile 
AWK utility is a data_extraction and reporting tool that uses a data-driven scripting language 
consisting of a set of actions to be taken against textual data (either in files or data streams) 
for the purpose of producing formatted reports. 
The language used by awk extensively uses the string datatype, 
associative arrays (that is, arrays indexed by key strings), and regular expressions.

Тест:

[jaypal:~/Temp] ./script.awk textfile 
data_extraction 15
BlessedKey

31.01.2013 01:18:32

Баш один лайнер.

cat YOUR_FILENAME | sed 's/ /\n/g' | sort | uniq | awk '{print length, $0}' | sort -nr | head
  1. распечатать файл (через cat)
  2. разделить слова (через sed)
  3. удаление дубликатов (через sort / uniq)
  4. префикс каждого слова с его длиной (awk)
  5. сортировка списка по длине слова
  6. печатайте слова с наибольшей длиной.

да, это будет медленнее, чем некоторые из вышеупомянутых решений, но это также не требует запоминания семантики bash для циклов.

https://stackoverflow.com/questions/8962466/finding-the-longest-word-in-a-text-file/14613986#comment37253629_14613986
Отлично! это то, что я искал!
https://stackoverflow.com/questions/8962466/finding-the-longest-word-in-a-text-file/14613986#comment47978418_14613986
Мне нравится элегантность этого однотонного лайнера. Спасибо!
https://stackoverflow.com/questions/8962466/finding-the-longest-word-in-a-text-file/14613986#comment54426913_14613986
На самом деле я только что получил его, это как ВИМ... s/замените ' / ' пробел на \nновую строку /gвдоль всей линии .
https://stackoverflow.com/questions/8962466/finding-the-longest-word-in-a-text-file/14613986#comment85493147_14613986
Или s/\b/\n/gвместо 1s / / \n/g, чтобы разделить на границах слов, и избежать подсчета пунктуации, как fullstops и запятые как часть слова.
https://stackoverflow.com/questions/8962466/finding-the-longest-word-in-a-text-file/14613986#comment94628358_14613986
sed 's/ /\n/g может быть заменен на tr ' ' '\n'
https://stackoverflow.com/questions/8962466/finding-the-longest-word-in-a-text-file/14613986#comment94628450_14613986
cat YOUR_FILENAME | tr ' ' \n | awk '{print length, $0}' | sort -nr | head -1
jimis

23.07.2013 07:06:06

Медленный из-за gazillion вилок, но чистая оболочка, не требует awk или специальных функций bash:

$ cat /usr/share/dict/words | \
    xargs -n1 -I '{}' -d '\n'   sh -c 'echo `echo -n "{}" | wc -c` "{}"' | \
    sort -n | tail
23 Pseudolamellibranchiata
23 pseudolamellibranchiate
23 scientificogeographical
23 thymolsulphonephthalein
23 transubstantiationalist
24 formaldehydesulphoxylate
24 pathologicopsychological
24 scientificophilosophical
24 tetraiodophenolphthalein
24 thyroparathyroidectomize

Вы можете легко распараллелить, например, до 4 процессоров, предоставив -P4.

Изменить: изменено для работы с одинарными кавычками, которые есть в некоторых словарях. Теперь он требует GNU xargs из-dдля -0. Я также добавил xargsдля вычисления на 4 ядрах:

-P4
https://stackoverflow.com/questions/8962466/finding-the-longest-word-in-a-text-file/17813988#comment92102199_17813988
Попробовать это... не могу заставить мою работать. Я думаю, что тот факт, что в файле "words" есть одиночные кавычки, не работает для меня. Как тебе удалось это обойти?
https://stackoverflow.com/questions/8962466/finding-the-longest-word-in-a-text-file/17813988#comment105293709_17813988
@chai в моей системе нет одиночных кавычек, только одно слово на строку. Что такое ваша ОС? Какой пакет предоставляет файл words?
https://stackoverflow.com/questions/8962466/finding-the-longest-word-in-a-text-file/17813988#comment105637426_17813988
Ubuntu 7.4.0-1ubuntu1~18.04.1. Не могу вспомнить, откуда он взялся. apt-файл говорит "wamerican", который я не помню, чтобы устанавливал. Должно быть, из-за какой-то зависимости от какого-то другого пакета. Первые несколько строк в /usr/доли/дикт/слова выглядят как от AMD AMD в АОЛ АОЛ в Аахен Аахен
https://stackoverflow.com/questions/8962466/finding-the-longest-word-in-a-text-file/17813988#comment105637452_17813988
Похоже, это испелл. АПТ-кэш rdepends wamerican wamerican обратной зависимости: |bsdmainutils |неизвестных cracklib |xvkbd |конфетке |для ispell экспертиза-дополнительные iamerican |bsdgames |неизвестных cracklib |cracklib-выполнения
https://stackoverflow.com/questions/8962466/finding-the-longest-word-in-a-text-file/17813988#comment105769202_17813988
Обновлено для обработки одинарных кавычек. Все еще не идеально (не будет работать с другими цитатами), но этот метод был просто для удовольствия в любом случае.
agc

07.07.2019 03:50:16

  1. Относительно быстрый bash функции без использования внешних утилит:

    # Usage: longcount <  textfile
    longcount () 
    { 
        declare -a c;
        while read x; do
            c[${#x}]="$x";
        done;
        echo ${#c[@]} "${c[${#c[@]}]}"
    }
    

    Пример:

    longcount < /usr/share/dict/words
    

    Выход:

    23 electroencephalograph's
    
  2. "Модифицированная версия оболочки POSIX xargs ответ; все еще очень медленно, занимает две или три минуты:

    tr "'" '_'  < /usr/share/dict/words |
    xargs -P$(nproc) -n1 -i sh -c 'set -- {} ; echo ${#1} "$1"' | 
    sort -n | tail | tr '_' "'"
    

    Обратите внимание на ведущий и замыкающий tr трудности с одинарными кавычками.

https://stackoverflow.com/questions/8962466/finding-the-longest-word-in-a-text-file/56918648#comment105769437_56918648
Приятно! Вдохновленный этим, я исправил свой ответ выше.
Помочь в развитии проекта:
Закрыть X