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

如何对制表符分隔的多列文本文件各列单独去重并输出唯一值

多列单独去重合并解决方案

实现思路

你的思路完全可行,实现逻辑如下:

  • 先获取输入文件的总列数
  • 为每一列创建临时文件,提取该列所有非空值后去重,保留表头
  • 用paste命令将所有列的去重结果按制表符拼接,自动补全空行对齐

完整脚本

#!/bin/bash
# 检查输入参数
if [ $# -ne 1 ]; then
    echo "用法: $0 <输入制表符分隔文件>"
    exit 1
fi
input_file="$1"
# 创建临时目录
tmp_dir=$(mktemp -d)
# 获取总列数
total_col=$(head -n 1 "$input_file" | awk -F'\t' '{print NF}')
# 逐列处理
for ((i=1; i<=total_col; i++)); do
    # 提取列,保留表头,内容按首次出现顺序去重
    awk -F'\t' -v col="$i" '
        NR == 1 {print $col; next}
        $col != "" {print $col}
    ' "$input_file" | awk '!seen[$0]++' > "${tmp_dir}/col_${i}.txt"
done
# 合并所有列,制表符分隔
paste -d'\t' "${tmp_dir}"/col_*.txt
# 清理临时文件
rm -rf "$tmp_dir"

使用方法

  1. 将上述脚本保存为col_dedup.sh
  2. 赋予执行权限:chmod +x col_dedup.sh
  3. 执行脚本输出结果:./col_dedup.sh your_input_file.tsv > output_file.tsv

说明

  • 自动适配任意列数的制表符分隔文件
  • 每列单独去重,保留值第一次出现的顺序,和示例输出逻辑一致
  • 空值会自动忽略,最终输出按最长列自动对齐,不足的位置留空
  • 输出默认采用制表符分隔,和输入格式保持一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:30:04