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

基于C Shell环境,使用Awk替换文本文件指定列值的问题

C Shell下Awk实现替换方案

步骤1:定义预替换变量

在C Shell中先定义需要替换的序列变量:

set new_vals = "0 0 22 5 0 22 0 22 5 0"

步骤2:Awk处理脚本

直接执行以下命令完成替换,将input.txt替换为你的源文件名,output.txt为输出文件名:

awk -v new_str="$new_vals" '
BEGIN {
    split(new_str, new_arr, " ")
}
/DataList/ {
    print $0
    cnt = 1
    next
}
cnt >= 1 && cnt <= 10 {
    $9 = new_arr[cnt]
    print $0
    cnt++
    next
}
1' input.txt > output.txt

脚本逻辑说明

  • BEGIN块:将传入的变量new_str按空格拆分为数组new_arr,数组下标1到10对应10个替换值。
  • 匹配DataList行:打印该行后初始化计数器cnt=1,跳过后续处理进入下一行。
  • 替换目标行:当计数器在1-10范围内时,将当前行第9列替换为new_arr中对应下标的值,打印后计数器自增。
  • 其他行:末尾单独的1表示所有未被上述逻辑匹配的行直接原样输出。

注意事项

  • 确保源文件中DataList后的10行每行都包含至少9列数据,否则会导致列替换异常。
  • C Shell中传递带空格的变量给Awk时,必须用双引号包裹"$new_vals",避免变量被Shell拆分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 14:12:18