递归搜索 .extension 文件并打印找到的文件中的行数?

Searching for .extension files recursively and print the number of lines in the files found?

我 运行 遇到了一个我正在尝试解决的问题,但如果不从头开始就无法想出办法。我的脚本获得一个扩展名并递归搜索每个 .extension 文件,然后输出 "filename:row #:word #"。我也想打印出在这些文件中找到的行 #-s 的总数。有什么方法可以使用现有代码吗?

for i in find . -name '*.'|awk -F/ '{print $NF}'
do
  echo "$i:`wc -l <$i|bc`:`wc -w <$i|bc`">>temp.txt
done

sort -r -t : -k3 temp.txt

cat temp.txt

我想你已经差不多了,除非我在你的要求中遗漏了一些东西:

#!/bin/bash
total=0
for f in `find . -name "*."` ; do
        lines=`wc -l < $f`
        words=`wc -w < $f`
        total=`echo "$lines+$total" | bc`
        echo "* $f:$lines:$words"
done
echo "# Total: $total"

编辑
根据@Mark Setchel 在评论中的推荐,这是上述脚本的更完善的版本:

#!/bin/bash
total=0
for f in `find . -name "*."` ; do
        read lines words _ < <(wc -wl "$f")
        total=$(($lines+$total))
        echo "* $f:$lines:$words"
done
echo "# Total: $total"

干杯

这是一个 one-liner 打印每个文件找到的行、文件的路径以及最后在所有文件中找到的所有行的总和:

find . -name "*.go" -exec wc -l {} \; | awk '{s+=} {print , } END {print s}'

在此示例中,如果将查找所有以 *.go 结尾的文件,则将执行使用 wc -l 获取行数并将输出打印到标准输出,然后使用 awk对变量 s 中第 1 列的所有输出求和,将仅在最后打印:END {print s}

如果你还想得到最后的单词和总和,你可以使用:

find . -name "*.go" -exec wc {} \; | \
    awk '{s+=; w+=} {print , , } END {print "Total:", s, w}'

希望这能让您了解如何根据输入对数据进行格式化、求和等。