Bash循环合并对应编号txt文件的问题求助
解决Bash循环合并对应编号文件的问题
当前目录文件列表:
mn@LeNOVO-220414-A:/mnt/c/Users/LeNOVO/Alnus$ ls Alnus1.txt Alnus2.txt Alnus3.txt Alnus4.txt Bobi1.txt Bobi2.txt Bobi3.txt Bobi4.txt
需求:将AlnusN.txt与BobiN.txt合并为combinationN.txt,批量处理所有对应编号的文件。
原脚本的错误点
- 变量赋值格式错误:Bash中变量赋值不能在
=两侧加空格,原代码other = "${name/1/1}"会被解析为执行other命令,导致"command not found"错误。 - 替换规则无效:
${name/1/1}是把字符串里的1替换成1,等于没做任何替换,无法得到对应的Bobi文件。 - 变量引用错误:引用变量应该用
$other,而不是%other。 - 输出文件名固定:原代码里的
$combination1是固定值,无法生成对应编号的输出文件。
正确脚本写法
如果已知编号范围是1到4,用以下简单写法:
for num in {1..4}; do cat "Alnus${num}.txt" "Bobi${num}.txt" > "combination${num}.txt" done
如果编号不固定,想自动匹配所有存在的对应文件,用更灵活的写法:
# 遍历所有Alnus开头的文件 for alnus_file in Alnus*.txt; do # 提取文件中的编号部分 num="${alnus_file#Alnus}" num="${num%.txt}" # 对应的Bobi文件名 bobi_file="Bobi${num}.txt" # 检查Bobi文件是否存在,避免报错 if [ -f "$bobi_file" ]; then cat "$alnus_file" "$bobi_file" > "combination${num}.txt" echo "已合并 ${alnus_file} 和 ${bobi_file} 到 combination${num}.txt" else echo "警告:${bobi_file} 不存在,跳过处理" fi done
脚本说明
- 第一种写法适用于已知编号范围的场景,简洁直接。
- 第二种写法自动识别所有
AlnusN.txt文件,提取编号后匹配对应BobiN.txt,还会检查文件是否存在,避免因文件缺失导致的错误。
内容的提问来源于stack exchange,提问作者alnus meinata
相关产品推荐
相关产品推荐

