GNU/Linux >> Linux の 問題 >  >> Linux

テキストファイルで最も長い単語を見つける

別の解決策:

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}

通常は、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"

ワンライナーを叩きます。

sed 's/ /\n/g' YOUR_FILENAME | sort | uniq | awk '{print length, $0}' | sort -nr | head -n 1
<オール>
  • ファイルを読み込んで単語を分割する (sed 経由)
  • 重複を削除 (sort | uniq 経由)
  • 各単語に長さのプレフィックスを付けます (awk)
  • 単語の長さでリストを並べ替える
  • 最も長い単語を出力してください。
  • はい、これは上記のソリューションのいくつかよりも遅くなりますが、bash for ループのセマンティクスを覚える必要もありません。


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

    Linux
    1. バッシュ‘?

    2. MvはFsでアトミックですか?

    3. ファイル内の単語をGrepしてから、ファイルをコピーしますか?

    1. Linux – Vmlinuxヘッダーにはカーネルイメージの長さが含まれていますか?

    2. Linuxのコマンドラインを使用してファイルを作成する

    3. この awk コマンドの出力をファイルに保存する方法は?

    1. テキスト ファイルの表示割合を表示できませんか?

    2. 非常に大きなテキスト ファイルの最後の 2 行を効率的に削除する

    3. テキスト ファイルに対するすべての変更の履歴を保持する