Unix环境下统计文件行数并关联文件名输出到指定文件的问题
问题修复方案
原代码问题说明
- 代码中使用
&连接filename赋值和awk命令,会将赋值操作放到后台异步执行,后续逻辑无法拿到文件名变量,同时也没有将文件名输出到结果文件,因此仅能得到行号结果 - 没有做格式拼接逻辑,所以无法生成逗号分隔、单引号包裹的目标格式
修复后可运行代码
#!/bin/bash for file in /temp/test*.txt do # 提取纯文件名 filename=$(basename "$file") # 统计行数,保留原有NR-1的逻辑,若不需要扣除首行可改为print NR line_count=$(awk 'END {print NR-1}' "$file") # 按要求格式输出到结果文件 echo "'${filename}','${line_count}'" >> /temp/LIST.txt done
优化方案(无需循环,效率更高)
如果不需要扣除首行(无需NR-1逻辑),可以直接用wc+awk一步实现:
wc -l /temp/test*.txt | grep -v ' total$' | awk '{printf("'\''%s'\'','\''%s'\''\n", $2, $1)}' > /temp/LIST.txt
注意事项
- 所有变量引用建议加双引号,避免文件名带空格时出现异常
- 若确认不需要扣除每行的首行,可直接删除原逻辑里的
-1即可
内容的提问来源于stack exchange,提问作者Novice_Techie
相关产品推荐
相关产品推荐

