如何计算文件的所有行数
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 grep
和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) '
这个想法是grep -c
以file-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
确保计算只在当前目录中完成,而不是在其子目录中。所以每个文件都算一次。
【讨论】:
有没有办法修改循环以查看子目录? 添加了另一个脚本。以上是关于如何计算文件的所有行数的主要内容,如果未能解决你的问题,请参考以下文章