Shell脚本读取文件关联目标文件逐行输出指定格式内容的问题求助
问题原因
你的脚本存在两个核心问题:
STRING=$(paste $file1.breed.txt)会一次性读取对应品种文件的全部内容,保留了文件内部的换行符,所以输出时只有第一行能拼接前缀,剩余行直接单独换行输出- 仅实现了外层遍历宠物类型(dog、cat)的逻辑,没有添加遍历每个类型下所有品种的内层循环,同时外层变量和循环变量重名(都叫
file1),也容易引发逻辑异常
解决方案
方案1:双层循环实现(适合新手理解)
修改后的脚本如下:
#!/bin/bash pet_list="pet_list.txt" # 外层循环遍历所有宠物类型 while read -r pet_type; do # 内层循环遍历当前宠物类型的所有品种 while read -r breed; do echo "My pet is a $pet_type and the breed is $breed" done < "${pet_type}.breed.txt" done < "$pet_list"
方案2:awk简洁实现
如果不需要复杂逻辑,也可以用awk一行命令实现效果:
awk 'FNR==NR{type[$0];next} {split(FILENAME, arr, "."); print "My pet is a "arr[1]" and the breed is "$0}' pet_list.txt *.breed.txt
两种方案运行后都可以得到你需要的预期输出。
内容的提问来源于stack exchange,提问作者W_Potato
相关产品推荐
相关产品推荐

