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

如何用Shell脚本按规则读取两文件并写入第三个文件?

按行匹配两文件生成目标内容的脚本修正

现有文件内容

file-A:

Red 
Green 
Blue
Yellow

file-B:

Car
Bus 
Van
Bike

预期输出(file-C):

Red Car
Green Bus Green
Blue Blue Blue
Yellow

原脚本问题

你原来的脚本把file-B的所有内容读成一个变量,然后在每个颜色的循环里遍历所有车辆,导致所有颜色和车辆的组合重复输出,根本没做到按行对应匹配的要求。

修正后的两种实现方案

方案一:用文件描述符同时读两个文件

这种方法直接同步读取两个文件的对应行,逻辑清晰:

# 用文件描述符3绑定file-A,4绑定file-B
while read -r color <&3 && read -r vehicle <&4; do
    case "$color" in
        Red)
            echo "$color $vehicle"
            ;;
        Green)
            echo "$color $vehicle $color"
            ;;
        Blue)
            echo "$color $color $color"
            ;;
        Yellow)
            echo "$color"
            ;;
    esac
done 3<file-A 4<file-B > file-C

方案二:把车辆存入数组按索引匹配

如果更贴近你原来的思路,可以先把file-B的行存到数组里,再按索引对应读取:

# 将file-B的所有行存入数组vehicles
mapfile -t vehicles < file-B
index=0

# 遍历file-A的每一行颜色
while read -r color; do
    vehicle=${vehicles[$index]}
    # 根据颜色生成对应格式的输出
    case "$color" in
        Red)
            echo "$color $vehicle"
            ;;
        Green)
            echo "$color $vehicle $color"
            ;;
        Blue)
            echo "$color $color $color"
            ;;
        Yellow)
            echo "$color"
            ;;
    esac
    ((index++))
done < file-A > file-C

说明

两种方案都能保证file-A和file-B的行一一对应,再通过case语句根据不同颜色生成符合要求的输出,完全匹配预期结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:01:08