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

在Unix中按列值拆分文本文件并生成顺序命名的输出文件

按第一列分组并输出到顺序命名文件的Unix解决方案

要实现将制表符分隔文件按第一列分组,输出到tmp1.txt、tmp2.txt这类顺序命名的文件中,可以使用以下awk命令:

awk '!seen[$1]++ {file_num++} {print $0 >> ("tmp" file_num ".txt"); close("tmp" file_num ".txt")}' input.txt

命令解释

  • !seen[$1]++:通过关联数组seen记录第一列值的出现次数。当首次遇到某个值时,执行file_num++,为该值分配唯一的文件序号;后续再遇到相同值时,不会触发序号递增。
  • print $0 >> ("tmp" file_num ".txt"):将当前行追加到对应序号的输出文件中。
  • close("tmp" file_num ".txt"):每次写入后关闭文件,避免因打开过多文件句柄导致报错,尤其适合处理大文件。

效果验证

以你提供的输入文件为例:

A 2
A 4
B 4
B 6
A 1
C 5

执行命令后会生成三个文件:

  • tmp1.txt内容:
    A 2
    A 4
    A 1
    
  • tmp2.txt内容:
    B 4
    B 6
    
  • tmp3.txt内容:
    C 5
    

自定义调整

如果需要修改文件名前缀或起始序号,只需调整命令中的对应部分:

  • 使用output作为前缀:
    awk '!seen[$1]++ {file_num++} {print $0 >> ("output" file_num ".txt"); close("output" file_num ".txt")}' input.txt
    
  • 从tmp0.txt开始编号:
    awk 'BEGIN {file_num=-1} !seen[$1]++ {file_num++} {print $0 >> ("tmp" file_num ".txt"); close("tmp" file_num ".txt")}' input.txt
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 02:43:22