基于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
相关产品推荐
相关产品推荐

