如何在Bash for循环中同一行打印文件名与对应值?
解决bash脚本输出文件名与对应值同行的问题
直接修改脚本,去掉不必要的目录切换,同时将文件名与对应值在同一行格式化输出,改进后的代码如下:
for dir in */; do dir_name="${dir%%/}" # 直接构造日志文件路径,无需切换目录 log_path="${dir}${dir_name}.log" # 提取目标值,若未匹配则返回空字符串 target_value=$(grep "Syntax" "$log_path" | awk '{print $8}') # 按照指定格式写入结果文件 printf '%s= %s\n' "$dir_name" "$target_value" >> ../final done
关键改进说明:
- 移除了冗余的
cd操作:直接通过路径访问日志文件,避免目录切换可能带来的异常(比如目录权限问题导致切换失败),同时让代码更简洁。 - 统一输出逻辑:用
printf一次性完成文件名= 值的格式拼接,避免原代码中分行写入的问题。 - 更安全的目录遍历:直接用
for dir in */遍历子目录,相比ls -d */能更好处理带空格或特殊字符的目录名,避免字符串拆分错误。
可选优化:处理无匹配的情况
如果需要对未找到"Syntax"字符串的目录输出提示信息,可以添加判断逻辑:
for dir in */; do dir_name="${dir%%/}" log_path="${dir}${dir_name}.log" target_value=$(grep "Syntax" "$log_path" | awk '{print $8}') if [ -n "$target_value" ]; then printf '%s= %s\n' "$dir_name" "$target_value" >> ../final else printf '%s= 未匹配到目标内容\n' "$dir_name" >> ../final fi done
内容的提问来源于stack exchange,提问作者subhadip das
相关产品推荐
相关产品推荐

