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

如何使用Bash提取文本文件行中的非重复单词

用Bash提取单行文本中的非重复单词

没问题,我来分享几个实用的Bash实现方案,帮你快速提取文本文件某一行里的非重复单词,分两种常见场景:保留原单词顺序和不介意排序的情况。

场景1:保留原单词出现顺序(最常用)

用awk是最直接的方式,它可以在遍历单词的同时记录已出现过的内容,只输出第一次出现的单词,完美保留原顺序。

处理文件所有行的非重复单词

awk '{
    delete seen  # 每行重置记录数组,避免跨行干扰
    for(i=1; i<=NF; i++) {
        if(!seen[$i]++) {
            printf "%s ", $i
        }
    }
    print ""  # 每行结束后换行
}' your_file.txt

只处理指定行(比如第3行)

如果只需要处理文件中的某一行,比如第3行,只需加一个行号判断:

awk 'NR==3 {
    for(i=1; i<=NF; i++) {
        if(!seen[$i]++) {
            printf "%s ", $i
        }
    }
    print ""
}' your_file.txt

举个例子:假设文件第3行内容是 I want want to display only only 1001 .,运行上面的命令后会输出:

I want to display only 1001 .

场景2:不介意单词顺序(简单粗暴)

如果不需要保留原顺序,可以用sort+uniq的组合,先把单行拆成每行一个单词,去重后再合并回一行:

处理指定行的写法

# 提取第3行 → 拆成每行一个单词 → 去重排序 → 合并回一行
sed -n '3p' your_file.txt | xargs -n1 | sort -u | xargs

同样用上面的例子,这个命令会输出排序后的非重复单词:

. 1001 I display only to want

额外说明

  • 如果你的单词分隔符不是空格(比如逗号、制表符),可以在awk里自定义字段分隔符,比如处理逗号分隔的内容:
    awk 'BEGIN{FS=","} NR==3 {
        for(i=1; i<=NF; i++) {
            if(!seen[$i]++) printf "%s, ", $i
        }
        print ""
    }' your_file.txt
    
  • 如果想去掉末尾多余的空格/分隔符,可以用sed 's/[ ,]$//'追加在命令最后,比如:
    awk 'NR==3 {
        for(i=1; i<=NF; i++) {
            if(!seen[$i]++) printf "%s ", $i
        }
        print ""
    }' your_file.txt | sed 's/ $//'
    

内容的提问来源于stack exchange,提问作者user3453495

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:07:25