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

使用awk和sed处理列格式及筛选数据的技术求助

解决方案

针对你的需求,直接用awk即可完成所有操作,无需sed。核心是通过正则匹配提取包含空格的字段,再完成拆分、分隔和筛选:

awk '
match($0, /^([^ ]+) +(.+?) +([^ ]+) +([0-9.]+) +([0-9.]+) +([0-9.]+)$/, arr) {
    # 拆分第一字段的前两位与剩余部分
    prefix = substr(arr[1], 1, 2)
    rest = substr(arr[1], 3)
    # 计算最后三列的数值和
    sum = arr[4] + arr[5] + arr[6]
    # 筛选和大于1500的行,用分号分隔所有列输出
    if (sum > 1500) {
        printf "%s;%s;%s;%s;%s;%s;%s\n", prefix, rest, arr[2], arr[3], arr[4], arr[5], arr[6]
    }
}
' Agenti.txt

命令说明

  1. 字段提取:用match函数结合正则表达式,精准匹配每行的6个字段(其中第二字段包含空格),结果存入arr数组:
    • arr[1]:原第一列(如05ALBUZZI)
    • arr[2]:含空格的名字字段(如CLAUDIA MARIA)
    • arr[3]:ID字段(如LBZCDM64M53F205R)
    • arr[4]-arr[6]:最后三个数值列
  2. 拆分第一列:通过substr截取arr[1]的前两位作为新的首列,剩余部分作为第二列
  3. 筛选逻辑:计算三个数值的和,仅输出和大于1500的行
  4. 分隔符替换:用printf按分号分隔所有字段输出,确保含空格的字段不被拆分

为什么你的原有命令无效?

你之前使用FS="\t"是错误的——你的文件是空格分隔而非制表符分隔,且第二字段包含空格,默认的空格分隔规则会把CLAUDIA MARIA拆成两个字段,导致后续处理全部错位。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 04:32:45