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

如何在制表符分隔文件的含数字列中插入文本?

给制表符分隔文件的数字列插入文本的解决方案

要处理你这种在制表符分隔文件的数字列(包括整数、小数、科学计数法格式)中插入文本的需求,用awk工具是最便捷的选择——它天生擅长处理结构化的文本文件,尤其是分隔符明确的表格类数据。

通用解决方案脚本

下面的脚本会自动识别所有数字列,并在数字前插入你指定的文本(比如示例里的Numeric: ),处理后保持原文件的制表符分隔格式:

BEGIN { 
    FS="\t"  # 设置输入分隔符为制表符
    OFS="\t" # 设置输出分隔符为制表符,保证输出格式不变
}
{
    # 遍历每一列
    for(i=1; i<=NF; i++) {
        # 正则匹配数字:涵盖正负整数、小数、科学计数法(e/E格式)
        if($i ~ /^[+-]?([0-9]+(\.[0-9]*)?|\.[0-9]+)([eE][+-]?[0-9]+)?$/) {
            # 这里修改插入的文本,比如改成$i = $i " [数字列]"就是在后面加
            $i = "Numeric: " $i
        }
    }
    # 输出处理后的整行
    print $0
}

怎么运行这个脚本

  1. 把上面的代码保存成一个文件,比如process_num_cols.awk
  2. 执行命令处理你的输入文件(假设输入文件叫input.txt,输出到output.txt):
awk -f process_num_cols.awk input.txt > output.txt

或者你也可以直接用一行命令完成,不用单独存脚本:

awk 'BEGIN { FS="\t"; OFS="\t" } { for(i=1; i<=NF; i++) { if($i ~ /^[+-]?([0-9]+(\.[0-9]*)?|\.[0-9]+)([eE][+-]?[0-9]+)?$/) { $i = "Numeric: " $i } } print $0 }' input.txt > output.txt

自定义修改

  • 如果想在数字后面插入文本,把$i = "Numeric: " $i改成$i = $i " [numeric]"即可
  • 如果只需要处理特定列(比如第1、2、5列),可以在判断里加上列号条件:
    if( (i==1 || i==2 || i==5) && $i ~ /^[+-]?([0-9]+(\.[0-9]*)?|\.[0-9]+)([eE][+-]?[0-9]+)?$/ )
    

测试你的示例数据

拿你提供的第一行数据举例:

10 7.98862e-05 10 cellular organisms; Bacteria; Proteobacteria; Betaproteobacteria; Burkholderiales; Burkholderiaceae; Ralstonia; Ralstonia solanacearum 0.000159772 10 0.000207704

处理后会变成:

Numeric: 10 Numeric: 7.98862e-05 Numeric: 10 cellular organisms; Bacteria; Proteobacteria; Betaproteobacteria; Burkholderiales; Burkholderiaceae; Ralstonia; Ralstonia solanacearum Numeric: 0.000159772 Numeric: 10 Numeric: 0.000207704

完全保留了原有的制表符分隔,只给数字列添加了指定文本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:22:59