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

处理百万无空格单词:用Awk生成Bigram、Trigram(最多7列)

用Awk生成单词的N-gram(最多7列)

需求说明

处理包含百万级无空格单词(支持Unicode)的文本文件,为每个单词生成从1-gram到7-gram的前缀片段(最长单词长度为7),不足7个片段的位置补空,最终用逗号分隔输出,格式匹配示例要求。

核心Awk脚本

直接指定最大长度为7时,使用以下命令:

BEGIN { max_len=7; OFS="," }
{
    output = ""
    for (i=1; i<=max_len; i++) {
        fragment = (i <= length($0)) ? substr($0, 1, i) : ""
        output = output fragment OFS
    }
    print output
}

动态适配最长单词长度

如果不想手动指定max_len,可以先自动获取文件中最长单词的长度,再传递给Awk:

# 先获取最长单词的长度
max_length=$(awk '{print length}' test.txt | sort -nr | head -1)
# 运行Awk脚本
awk -v max_len="$max_length" 'BEGIN {OFS=","} {
    output = ""
    for (i=1; i<=max_len; i++) {
        fragment = (i <= length($0)) ? substr($0, 1, i) : ""
        output = output fragment OFS
    }
    print output
}' test.txt

脚本说明

  • BEGIN块:初始化最大列数max_len和输出分隔符OFS为逗号
  • 逐行处理每个单词:循环生成1到max_len长度的前缀片段,单词长度不足时对应位置留空
  • 拼接所有片段后直接输出,格式完全匹配示例要求

测试验证

用示例输入文件test.txt运行脚本,输出结果如下:

w,wo,wor,work,worke,worked,
w,wo,wor,work,worki,workin,working
w,wo,wor,work,works,,
t,te,tes,test,teste,tested,,
t,te,tes,test,tests,,
f,fi,fin,find,,,,
f,fo,fou,foun,found,,

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 05:58:21