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

如何用awk、sed或其他工具将文本内数字分成225组(每组129个)?

用awk快速实现分组需求

这个需求用awk来处理最直接高效,而且你的数字总数刚好是225×129=29025,完美匹配分组规则,不会有剩余数字~下面分两种场景给出实现方案:

场景1:已有包含连续数字的文本文件(每行一个数字)

假设你的数字文件名为numbers.txt,直接用下面的awk命令就能生成想要的格式:

awk 'BEGIN{group=1; count=0} {
    count++
    if (count == 1) {
        printf "[ Lipid %d ] ", group
    }
    printf "%s", $0
    if (count == 129) {
        print ""
        count = 0
        group++
    } else {
        printf " "
    }
}' numbers.txt

逻辑解释:

  • BEGIN块初始化两个计数器:group记录当前组号(从1开始),count记录组内已处理的数字个数(从0开始)。
  • 每读取一个数字,count加1;如果是组内第一个数字,先打印[ Lipid X ]前缀。
  • 打印当前数字后,判断是否达到组内129个数字的上限:如果是,换行并重置计数器、递增组号;否则打印空格分隔下一个数字。

场景2:没有现成文件,直接生成数字并分组

如果不需要预先保存数字文件,可以用seq命令生成29026到58050的连续数字,再管道给awk处理:

seq 29026 58050 | awk 'BEGIN{group=1; count=0} {
    count++
    if (count == 1) {
        printf "[ Lipid %d ] ", group
    }
    printf "%s", $0
    if (count == 129) {
        print ""
        count = 0
        group++
    } else {
        printf " "
    }
}'

备选方案:用split+sed组合实现

如果你偏好多个工具配合,也可以先把文件拆分成225个小文件(每个129行),再给每个文件添加前缀并合并:

# 拆分文件,每个小文件129行
split -l 129 numbers.txt temp_group_

# 遍历每个小文件,添加前缀并转换为一行
for i in $(seq 1 225); do
    # 给每个文件的第一行添加[ Lipid X ]前缀
    sed "1s/^/[ Lipid $i ] /" temp_group_$(printf "%02d" $i) | 
    # 把换行符换成空格
    tr '\n' ' ' | 
    # 去掉行尾多余的空格
    sed 's/ $//'
done

# 清理临时文件
rm temp_group_*

这个方案步骤稍多,适合喜欢分步处理的场景,但效率不如awk单命令高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 15:47:46