You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需解压.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 02:33:30