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

如何通过Bash按序合并文件名列表文件中的对应文件?

批量合并对应序号文件的Bash实现

这里提供两种可行的方案,都能实现你要的批量合并需求:

方案一:固定循环序号(已知共48组)

如果确定只有48组文件,可以直接遍历1到48的序号,逐个提取对应文件并合并:

for N in {1..48}; do
    # 从四个列表文件中提取第N行的文件名
    f_l001=$(sed -n "${N}p" L001)
    f_l002=$(sed -n "${N}p" L002)
    f_l003=$(sed -n "${N}p" L003)
    f_l004=$(sed -n "${N}p" L004)
    
    # 合并四个文件到目标文件
    cat "$f_l001" "$f_l002" "$f_l003" "$f_l004" > "All_file${N}.file"
done

原理说明

  • sed -n "${N}p":仅输出文件的第N行内容,刚好对应每个序号的目标文件名
  • 循环变量N从1到48,直接对应file1到file48的序号,生成目标文件名All_file${N}.file

方案二:动态匹配对应行(通用版)

如果不确定文件组数,或者未来可能增减组数,用paste命令把四个列表文件的对应行合并,再逐行处理:

# 把四个列表文件的对应行合并为一行(每行4个文件名),再循环处理
paste L001 L002 L003 L004 | while read f1 f2 f3 f4; do
    # 从第一个文件名中提取序号(比如从file1_L001中取出1)
    file_num=${f1#file}       # 去掉开头的"file",得到"1_L001"
    file_num=${file_num%_L00*}# 去掉结尾的"_L00x",得到纯序号
    
    # 合并并输出到目标文件
    cat "$f1" "$f2" "$f3" "$f4" > "All_file${file_num}.file"
done

原理说明

  • paste L001 L002 L003 L004:将四个文件的第1行、第2行……分别合并成一行,每行包含4个对应序号的文件名
  • read f1 f2 f3 f4:把每行的四个文件名分别赋值给变量,方便后续调用
  • 参数扩展${f1#file}和${file_num%_L00*}:从文件名中提取纯序号,避免硬编码数字,适配任意序号格式

注意事项

  1. 确保四个L00x列表文件的行数完全一致,否则会出现文件不匹配的情况
  2. 如果文件名包含空格,需要修改read命令的分隔符(调整IFS变量),但你的示例中文件名无空格,无需额外处理
  3. 脚本会直接覆盖已存在的All_fileN.file文件,执行前请确认是否需要备份原有文件

内容的提问来源于stack exchange,提问作者Antonio Rodriguez Franco

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 06:03:31