递归搜索 .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}'
希望这能让您了解如何根据输入对数据进行格式化、求和等。
我 运行 遇到了一个我正在尝试解决的问题,但如果不从头开始就无法想出办法。我的脚本获得一个扩展名并递归搜索每个 .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}'
希望这能让您了解如何根据输入对数据进行格式化、求和等。