如何计算文件的所有行数

Posted

技术标签:

【中文标题】如何计算文件的所有行数【英文标题】:How to count all the lines of files 【发布时间】:2017-06-06 10:43:14 【问题描述】:

我还需要将目录名称作为输出。我能做的是用目录名输出所有目录中的总行数。

find . -name '*.c' | xargs wc -l | xargs -I dirname  | xargs -I dirname 

【问题讨论】:

你能用一个合适的例子来重复你的需求吗?你能详细解释一下吗? @Inian,基本上我想要目录路径和该目录中以分号结尾的行数(该目录中所有文件的行数)。我可以使用 ' find 输出目录中以分号结尾的总行数。 -name '*.c' -print0 | xargs -0 grep '[;]$' | wc -l ' 但我不知道如何按目录获取输出。 @Inian,做到了。 【参考方案1】:

我把bash 的命令混杂在一起,主要是GNU 特定的,确保你有它们,GNU grepGNU Awk

find . -type f -print0 | xargs -0 grep -c ';$' | \
  awk -F":" '$NF>0cmd="dirname "$1; while ( ( cmd | getline result ) > 0 ) printf "%s\t%s\n",result,$2 close(cmd) '

这个想法是grep -cfile-name:count的格式返回模式计数,我将它传递给GNU Awk以过滤那些计数大于零的文件并打印包含它的文件的目录和算自己。

作为他们现在所说的一种花哨的单线,

find . -type f -print0 | xargs -0 grep -c ';$' | awk -F":" '$NF>0cmd="dirname "$1; while ( ( cmd | getline result ) > 0 ) printf "%s\t%s\n",result,$2 close(cmd) '

【讨论】:

干得好!谢谢你的解释。【参考方案2】:

这是一个脚本:

#!/usr/bin/env bash

for dir in */; do (
    cd "$dir"
    count=$(find . -name '*.c' -print0 | xargs -0 grep '[;]$' | wc -l)
    echo -e "$count\t$dir"
) done

如果你想要每个子目录的数字:

#!/usr/bin/env bash

for dir in $(find . -type d); do (
    cd "$dir"
    count=$(find . -maxdepth 1 -name '*.c' -print0 | \
        xargs -0 grep '[;]$' | wc -l)
    echo -e "$count\t$dir"
) done

使用-maxdepth 1 确保计算只在当前目录中完成,而不是在其子目录中。所以每个文件都算一次。

【讨论】:

有没有办法修改循环以查看子目录? 添加了另一个脚本。

以上是关于如何计算文件的所有行数的主要内容,如果未能解决你的问题,请参考以下文章

计算 git 存储库中的行数

如何计算行数并仍然显示所有行? mysql

如何在 C++ 中计算文件的行数?

PowerShell:如何计算 csv 文件中的行数?

Qt - 如何计算 .txt 文件中的行数

如何使用 Perl 计算文件中的字符、单词和行数?