查找文本文件中最长的单词

Mil*_*imz 15 unix linux bash

我试图制作一个简单的脚本,使用bash在文本文件中查找最大的单词及其数量/长度.我知道当我使用awk它简单直接但我想尝试使用这种方法... a=wmememememe我想我知道如果我想找到长度我可以使用echo {#a}它的话我会echo ${a}.但是我想在下面应用它

for i in `cat so.txt` do
Run Code Online (Sandbox Code Playgroud)

so.txt包含单词,我希望它有意义.

Ble*_*Key 22

打一个班轮.

cat YOUR_FILENAME | sed 's/ /\n/g' | sort | uniq | awk '{print length, $0}' | sort -nr | head
Run Code Online (Sandbox Code Playgroud)
  1. 打印文件(通过cat)
  2. 分开的话(通过sed)
  3. 删除重复项(通过sort | uniq)
  4. 用它的长度(awk)为每个单词加前缀
  5. 按字长对列表进行排序
  6. 打印最长的单词.

是的,这将比上面的一些解决方案慢,但它也不需要记住bash for循环的语义.


Pau*_*ce. 13

通常情况下,您需要使用while read循环而不是for i in $(cat),但是因为您希望拆分所有单词,所以在这种情况下它可以正常运行.

#!/bin/bash
longest=0
for word in $(<so.txt)
do
    len=${#word}
    if (( len > longest ))
    then
        longest=$len
        longword=$word
    fi
done
printf 'The longest word is %s and its length is %d.\n' "$longword" "$longest"
Run Code Online (Sandbox Code Playgroud)


Rob*_*ers 5

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

echo $longest
Run Code Online (Sandbox Code Playgroud)


Fri*_*ner 5

另一个解决方案:

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}
Run Code Online (Sandbox Code Playgroud)