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

使用awk实现文件合并及自定义字段位置的技术问询

需求1:将file1字段插入file0的Uplinks与Portgroups之间

假设file0与file1的行数一一对应,可通过以下awk脚本实现插入逻辑:

# 先读取file1的所有行存入数组
NR == FNR {
    arr[NR] = $0
    next
}
# 处理file0的每一行
{
    line = ""
    for (i=1; i<=NF; i++) {
        line = line $i " "
        # 匹配到Uplinks开头的字段后,插入file1对应行的内容
        if ($i ~ /^Uplinks:/) {
            line = line arr[FNR] " "
        }
    }
    # 去除末尾多余空格后输出
    sub(/ $/, "", line)
    print line
}

执行命令:

awk -f insert.awk file1.txt file0.txt

说明

  • 若Uplinks的匹配规则需要调整(比如字段不是以Uplinks:开头,而是包含Uplinks关键词),可修改$i ~ /^Uplinks:/为$i ~ /Uplinks/。
  • 若文件使用非空格分隔符(如逗号、冒号),需调整NF的遍历逻辑,或通过split()函数拆分每行内容后处理。

需求2:关联vSwitch与多vmnic的网卡记录

假设file2的格式为vSwitch名称:vmnic1,vmnic2,...,file1的每条记录以vmnic作为第一个字段,可通过以下awk脚本实现关联:

# 先读取file2,构建vmnic到vSwitch的映射数组
NR == FNR {
    # 拆分vSwitch和vmnic列表
    split($0, vs_info, ":")
    vswitch = vs_info[1]
    split(vs_info[2], vmnic_list, ",")
    # 每个vmnic对应到所属vSwitch
    for (idx in vmnic_list) {
        vmnic_map[vmnic_list[idx]] = vswitch
    }
    next
}
# 处理file1的网卡记录,输出关联后的内容
{
    # 假设输出格式为「vSwitch名称 vmnic 网卡信息」,可按需调整printf格式
    printf "%-10s %-8s %s\n", vmnic_map[$1], $1, substr($0, index($0, $2))
}

执行命令:

awk -f map.awk file2.txt file1.txt

说明

  • 若file2或file1的格式有变化,可修改split()的分隔符参数,或调整字段提取逻辑。
  • 输出格式可通过修改printf的占位符和内容自由定制,比如改为逗号分隔的CSV格式:printf "%s,%s,%s\n", vmnic_map[$1], $1, substr($0, index($0, $2))。

内容的提问来源于stack exchange,提问作者hyun.ji

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 03:55:23