如何统计.tar.gz压缩包内每个txt文件的行数并输出对应列表
统计.tar.gz压缩包内各txt文件行数的实现方案
以下方案适用于Linux、macOS、WSL等类Unix环境,无需提前解压整个压缩包,直接基于流式处理完成统计:
方案1:单命令高效实现(仅需读取一次压缩包,适合大文件场景)
使用tar自带的--to-command参数,对每个压缩内的文件单独执行统计逻辑:
tar zxf 你的压缩包名称.tar.gz --to-command='wc -l | sed "s|^|$TAR_FILENAME |"'
- 逻辑说明:
--to-command会让tar将每个解压出的文件内容传递给后续命令处理,内置环境变量$TAR_FILENAME对应当前处理的压缩内文件名,wc -l统计行数后通过sed将文件名拼接在输出行首,最终直接输出符合要求的「文件名 行数」格式。
方案2:高兼容实现(适配不支持--to-command参数的旧版本tar环境)
先枚举压缩包内所有txt文件,再逐文件统计行数:
tar ztf 你的压缩包名称.tar.gz | grep '\.txt$' | while read fname; do line_count=$(tar zxf 你的压缩包名称.tar.gz -O "$fname" | wc -l) echo "$fname $line_count" done
- 逻辑说明:
tar ztf先列出压缩包内所有文件路径,通过grep过滤出txt后缀的文件,循环读取每个文件名后用-O参数将对应文件内容输出到标准输出,交给wc -l统计行数后拼接输出。
若压缩包内的txt文件名包含空格,可在方案2的循环前添加
IFS=$'\n'避免文件名被截断。
内容的提问来源于stack exchange,提问作者StOMicha
相关产品推荐
相关产品推荐

