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

AWK文本处理:如何修改新增列首行值并调整分隔符

调整AWK命令实现定制化列插入需求

我来帮你修改AWK命令,完美满足你提出的两个要求:

  1. 首行新增列的值替换为CYCLE_NUMBER
  2. 首行中新增列与APPLICATION_STATUS列之间仅用单个制表符分隔,其余行保持原有的三个制表符分隔格式

修改后的AWK命令

awk -v insert_col=4 -v header_val="CYCLE_NUMBER" -v row_val="four" '
BEGIN {
    orig_sep = "\t\t\t"  # 定义默认的三制表符分隔符
    header_special_sep = "\t"  # 首行需要的单制表符分隔符
}
# 单独处理首行
NR == 1 {
    # 按原分隔符拆分整行到数组
    split($0, fields, orig_sep)
    # 从插入位置开始,将数组元素后移一位,腾出插入位置
    for (i = length(fields); i >= insert_col; i--) {
        fields[i+1] = fields[i]
    }
    # 插入首行的定制值
    fields[insert_col] = header_val
    
    # 拼接数组生成首行内容,重点处理分隔符
    output = fields[1]
    for (i = 2; i <= length(fields); i++) {
        # 当拼接新增列和原APPLICATION_STATUS列时,用单制表符
        if (i == insert_col + 1) {
            output = output header_special_sep fields[i]
        } else {
            # 其他列之间保持三制表符
            output = output orig_sep fields[i]
        }
    }
    print output
    next  # 跳过后续通用处理
}
# 处理非首行,保持原逻辑
{
    FS = OFS = orig_sep
    for (i = NF + 1; i > insert_col; i--) {
        $i = $(i-1)
    }
    $insert_col = row_val
    print $0
}
' file1.txt

命令逻辑解释

  • BEGIN块:提前定义好两种分隔符,避免重复写死字符串,提升可读性。
  • 首行处理:
    1. 用split拆分原行,方便精准调整列的位置和分隔符。
    2. 数组元素后移腾出插入位置,插入CYCLE_NUMBER。
    3. 拼接时专门判断新增列的下一列(原APPLICATION_STATUS列),用单个制表符连接,其他列保持原格式。
  • 非首行处理:完全沿用你原来的AWK逻辑,确保其他行的格式和新增列值不变。

期望输出示例

APPLICATION			ODATE			IF_EXECUTING	CYCLE_NUMBER	APPLICATION_STATUS
Job1			20200731			Post			four			NOTOK
Job2			20200731			Post			four			NOTOK
Job3			20200731			Post			four			NOTOK
JOb3			20200731			Post			four			NOTOK

(注:首行中CYCLE_NUMBER和APPLICATION_STATUS之间是单个制表符,其余列间隔为三个制表符)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 18:02:34