【问题标题】:Row count of each file in a `.zip` folder`.zip` 文件夹中每个文件的行数
【发布时间】:2018-04-12 21:13:13
【问题描述】:

我有一个 zip 文件夹,里面有 5 个文本文件。我必须在不解压缩 zip 文件夹的情况下检查每个文件的行数。

我试过zcat file.zip | wc -l,但它只给出了第一个文件的计数。

你们能帮我得到如下所述的结果吗:

File_Name Rowcount
file1 100
file2 100
file3 100
file4 100
file5 100

【问题讨论】:

  • file.ziptar.gz 还是 MS-DOS zip 文件?

标签: linux unix zcat


【解决方案1】:

如果您的文件是一个 gzip 压缩的 tar 存档,那么您可以简单地遍历存档中的每个文件名以获取每个文件中的行数。例如,如果您存档包含:

$ tar -tzf /tmp/tmp-david/zipfile.tar.gz
yon.c
yourmachinecode.s
zeroonect.c
zeros
zz

您可以使用以下命令遍历文件名:

$ for i in $(tar -tzf /tmp/tmp-david/zipfile.tar.gz); do 
printf "%8d lines - %s\n" $(wc -l <"$i") "$i"
done
      61 lines - yon.c
       5 lines - yourmachinecode.s
      63 lines - zeroonect.c
       0 lines - zeros
       1 lines - zz

您可以根据需要为每个计数保留一个总和并递增以获得总数。

如果您的文件是 .zip (MS-DOS) 存档,那么您可以做同样的事情,但是从 unzip -l 的输出中解析单个文件名需要更多的工作,例如

$ unzip -l /tmp/tmp-david/zipfile.zip | grep -v '^-' | \
tail -n+3 | head -n-1 | awk '{print $4}'

(您可以在 命令替换 中使用上述内容来驱动 for 循环)

【讨论】:

  • 感谢回复,我试过这个 unzip -l /tmp/tmp-david/zipfile.zip | grep -v '^-' | \尾-n+3 |头-n-1 | awk '{打印 $4}' 。它只是返回文件名而不是行数。
  • @user9638443 -- 当然是。重新阅读答案:)中的最后一行,如for i in $(unzip -l ..... awk '{print $4}'); do ...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 2021-12-07
  • 1970-01-01
相关资源
最近更新 更多