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

如何在Bash中使用sed、awk等工具去除每行内的重复单词

解决方案

你可以直接使用awk实现行内单词去重,该方案会保留单词在每行中的首次出现顺序,不会打乱原有排列,完全符合你给出的预期输出效果:

awk '{
    delete seen
    for(i=1; i<=NF; i++) {
        if (!seen[$i]++) {
            printf "%s ", $i
        }
    }
    print ""
}' 你的输入文件名.txt

如果要直接保存结果到新文件,在命令末尾加重定向即可:

awk '{delete seen; for(i=1;i<=NF;i++) if (!seen[$i]++) printf "%s ", $i; print ""}' 你的输入文件名.txt > 去重后的输出文件名.txt

原方案失效原因

  • sort file | uniq的作用是对整行内容去重,只有完全相同的整行才会被合并,完全不会处理行内部的重复单词
  • 你写的while循环中sort && uniq没有读取当前循环拿到的行内容,相当于每次循环都在等待标准输入,无法处理目标文本

内容的提问来源于stack exchange,提问作者Juliana B C

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:54:07