无需解压.zip文件,如何统计其中各文本文件的行数?
不解压ZIP包统计每个文件行数的解决方案
我明白你的问题了——用zcat file.zip | wc -l只能拿到第一个文件的行数,因为zcat会把ZIP包当成单一的压缩流来处理,只会解析输出第一个文件的内容,没法区分包里的多个文件。
下面给你两种实用的方法,都不需要解压整个包,就能得到你想要的格式化结果:
方法一:用unzip配合循环
这个方法兼容性很好,大部分系统都自带unzip:
# 先打印表头 echo "File_Name Rowcount" # 遍历压缩包里的所有文件 for file in $(unzip -l file.zip | awk 'NR>3 && NF>1 {print $NF}'); do # 统计单个文件的行数(-p参数直接打印文件内容到标准输出,不落地) row_count=$(unzip -p file.zip "$file" | wc -l) # 输出文件名和行数 echo "$file $row_count" done
小解释:
unzip -l file.zip:列出ZIP包内的文件列表awk 'NR>3 && NF>1 {print $NF}':跳过列表的前3行(表头和分隔线),提取出每个文件名(最后一列)unzip -p:直接输出指定文件的内容,不用解压到本地磁盘
方法二:用zipinfo简化文件名提取
如果你的系统有zipinfo(很多Linux发行版和macOS都自带),这个写法更简洁:
echo "File_Name Rowcount" # zipinfo -1 直接输出包里的所有文件名,一行一个 zipinfo -1 file.zip | while read -r file; do echo -n "$file " unzip -p file.zip "$file" | wc -l done
两种方法都能输出你想要的格式,比如:
File_Name Rowcount file1 100 file2 100 file3 100 file4 100 file5 100
内容的提问来源于stack exchange,提问作者user9638443
相关产品推荐
相关产品推荐

