【问题标题】:Count number of lines of .gz files recursively on directory?在目录上递归计算 .gz 文件的行数?
【发布时间】:2014-03-30 16:06:01
【问题描述】:

我有数百个目录,每个目录都包含.gz 文件,我想计算该.gz 文件的行数。

我尝试了以下一种方法来实现这一点,但它不起作用说 gzip: stdin: unexpected end of file

find . type -f -name '*.data.gz' | gunzip -c  | wc -l 

例如如果有两个目录,每个目录都有一个 .gz 文件,并且假设每个目录有 100 行,那么我希望输出总共 200 行。

【问题讨论】:

  • 在“gunzip”之前添加一个“xargs”

标签: bash shell unix


【解决方案1】:

你在那儿……:

find . -type f -name '*.gz' | xargs zcat | wc -l

【讨论】:

  • 或者,只是zcat *.gz | wc -l
  • 实际上,OP 明确要求递归解决方案,所以我不会这样做。 zcat **/*.gz | wc -l 可以在 zshbash 中使用 shopt -s globstar~/.bashrc 中启用。
  • @arekolek dees 命令帐户子文件夹的 .gz 文件,还是只是当前目录?
  • @Memin *.gz 只是当前目录,**/*.gz 是当前目录和子文件夹
【解决方案2】:
gzip -dc *.gz | wc -l

-d 解压 -c 到 STDOUT(不到磁盘)

gzip -dcr * | wc -l

-d 解压

-c 到 STDOUT(不到磁盘)

-r 递归(查看目录)

【讨论】:

  • zcat(在某些系统上为gzcat)等价于gzip -dcgunzip -c
  • 另外,第二个选项将(尝试)输出所有文件,而不仅仅是带有 .gz 扩展名,可能会打印有关文件 not in gzip format 的消息。
【解决方案3】:

我的目录:

.
├── a.gz
├── b.gz
└── t
    └── f.gz

命令来回显和计算找到的每个 gz 文件的行数:

find . -type f -name '*.gz' -exec bash -c 'echo $1;gunzip -c $1 | wc -l' dummy {} \;

输出:

./a.gz
5
./b.gz
6
./t/f.gz
3

那么,为了获得总计:

echo $((`find . -type f -name '*.gz' -exec bash -c 'gunzip -c $1 | wc -l' dummy {} \;  | paste -sd+`))

输出:

14

【讨论】:

  • 为什么我们需要一个假人?我试过没有假人,但它不起作用。但我不知道为什么需要一个假人。
  • 这有助于获得个人计数。该命令可以在$1 周围加上双引号来改进——对于文件名中包含空格的情况。
【解决方案4】:

您可以使用此代码 sn-p。

#!/bin/bash

gzfiles=`find . -name '*.data.gz'`

total_line_count=0
if [ $? -eq 0 ]; then
        echo "Found at:"
        for file in $gzfiles
                do
                        echo " - $file"
                        fl_line_count=`gunzip $file -c | wc -l`
                        total_line_count=`expr $total_line_count + $fl_line_count`
                done
        else
                echo "No GZIP file found :("
fi

echo "Line count: $total_line_count"

【讨论】:

    猜你喜欢
    • 2012-02-27
    • 2021-09-09
    • 1970-01-01
    • 2020-06-08
    • 1970-01-01
    • 2015-03-01
    • 2016-02-15
    • 2016-06-04
    • 2019-11-10
    相关资源
    最近更新 更多