如何调整awk输出顺序 将文件匹配总数显示在输出最开头
问题修正方案
原有逻辑是awk读取到find输出的路径时就直接打印,全部读取完成后才在END块输出统计信息,因此统计行必然在所有路径之后。要调整顺序只需要让awk先缓存所有匹配路径,完成计数后先输出统计行,再输出缓存的路径列表即可,同时需要修正错误输出混入结果的问题。
修改后的变量定义
results=$(find . -name "$1" -type f 2>/dev/null | awk '{path_list[++count]=$0} END{print count " matches found"; for(i=1;i<=count;i++) print path_list[i]}')
改动说明
- 新增
2>/dev/null:将find命令的错误输出(比如无权限访问目录的Permission denied提示)直接丢弃,避免无关报错混入正常结果。你之前输出里的python-dotenv==0.17.1: command not found报错,本质是后续输出变量时未加引号导致shell误将文件路径当作命令执行,输出变量时记得用echo "$results"(加双引号)即可彻底避免该问题。 - awk逻辑调整:读取到路径时不直接打印,而是存入
path_list数组同时用count变量计数;所有路径读取完成后,先打印统计总数行,再遍历数组逐行输出缓存的文件路径。
效果示例
调整后执行./find-file.sh requirements.txt的输出结构如下:
2 matches found ./project-h-squad/requirements.txt ./team-portfolio/requirements.txt
内容的提问来源于stack exchange,提问作者HelloWorld
相关产品推荐
相关产品推荐

