You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Bash脚本以找出每个文本文件中最长的两个单词

找出每个文本文件中最长的两个单词

原Bash脚本功能为找出每个可读文本文件中最长的单个单词:

for i; do
    if [[ -r $i ]]; then
      max_word=
      max_len=0

      for j in $(strings $i); do 
        len=${#j}
        if [[ $len -gt $max_len ]]; then 
          max_len=$len 
          max_word=$j 
        fi 
      done 
      echo "$i : '$max_word' ($max_len characters)"
    fi
done 

需求:修改脚本,使其能找出每个文本文件中各自最长的两个单词,而非所有文件中的全局最长两个。

修改后的脚本

for i; do
    if [[ -r $i ]]; then
      # 每个文件处理前重置变量,确保仅针对当前文件计算
      max_word=
      max_len=0
      max_word2=
      max_len2=0

      for j in $(strings $i); do 
        len=${#j}
        # 优先判断是否超过第一长单词
        if [[ $len -gt $max_len ]]; then
          # 原第一长降级为第二长
          max_word2=$max_word
          max_len2=$max_len
          # 更新第一长
          max_len=$len
          max_word=$j
        elif [[ $len -gt $max_len2 && $j != $max_word ]]; then
          # 长度介于第二长和第一长之间时,更新第二长(排除重复单词)
          max_len2=$len
          max_word2=$j
        fi
      done 

      # 拼接输出结果,兼容只有单个有效单词的情况
      output="$i : "
      [[ -n $max_word ]] && output+="'$max_word' ($max_len characters)"
      [[ -n $max_word2 ]] && output+=", '$max_word2' ($max_len2 characters)"
      echo "$output"
    fi
done

关键修改说明

  • 独立文件计算:在每个可读文件的处理流程开头,重置四个核心变量(max_word、max_len、max_word2、max_len2),保证每个文件的最长单词计算完全独立,不会跨文件累积结果。
  • 双层级比较逻辑:
    1. 新单词长度超过第一长时,将原第一长的内容转移到第二长变量,再更新第一长。
    2. 新单词长度未超过第一长但超过第二长时,直接更新第二长;加入$j != $max_word是为了避免重复记录同一单词,若不需要该限制可删除此条件。
  • 鲁棒性处理:输出时判断变量是否为空,避免文件只有一个有效单词时出现空值输出。

内容的提问来源于stack exchange,提问作者big daddy burger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 20:42:32