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

求Linux命令:按每1000行间隔统计TSV文件第7列唯一值数量

解决TSV文件按每1000行统计第7列唯一值数量的命令

正确实现命令

可以用awk一次性完成分组、去重和统计,无需多次管道调用,效率更高:

awk -F'\t' '{
    # 计算当前行所属的分组(1-10组)
    group = int((NR - 1) / 1000) + 1
    # 用数组键存储第7列的值,自动去重
    unique[$7] = 1
    # 每满1000行,输出当前组的唯一值数量并清空数组
    if (NR % 1000 == 0) {
        print "组" group " 第7列唯一值数量:" length(unique)
        delete unique
    }
}
# 处理最后一组不足1000行的情况(本例刚好10000行,可省略,但保留更通用)
END {
    if (length(unique) > 0) {
        print "组" group " 第7列唯一值数量:" length(unique)
    }
}' your_tsv_file.tsv

你之前命令的问题

  1. 未指定输出第7列:原awk命令只截取了行,但没提取第7列,后续sort和uniq处理的是整行内容而非目标列
  2. 仅处理第一组:只能统计1-1000行的数据,无法自动遍历所有10组
  3. 重定向位置错误:>myfile应该放在命令末尾,否则会提前截断输出

替代方案(用管道分步处理)

如果更喜欢分步操作,也可以用循环批量处理每组:

for i in {0..9}; do
    start=$((i*1000 + 1))
    end=$(( (i+1)*1000 ))
    echo "组$((i+1)) 唯一值数量:"
    awk -F'\t' "NR>=$start && NR<=$end {print \$7}" your_tsv_file.tsv | sort -u | wc -l
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 07:45:24