我遇到了一个我试图解决的问题,但是从一开始就不考虑整个事情的方法。我的脚本获取扩展并递归搜索每个.extension文件,然后输出“filename:row#:word#”。我想打印出那些文件中找到的行#-s的总量。有没有办法使用现有代码?
for i in find . -name '*.$1'|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
答案 0 :(得分:1)
我认为你几乎就在那里,除非我遗漏了你的要求:
#!/bin/bash
total=0
for f in `find . -name "*.$1"` ; 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 "*.$1"` ; do
read lines words _ < <(wc -wl "$f")
total=$(($lines+$total))
echo "* $f:$lines:$words"
done
echo "# Total: $total"
干杯
答案 1 :(得分:0)
这是一行单行打印每个文件找到的行,文件的路径,最后是所有文件中找到的所有行的总和:
find . -name "*.go" -exec wc -l {} \; | awk '{s+=$1} {print $1, $2} END {print s}'
在这个示例中,如果找到所有以*.go
结尾的文件,那么将执行use wc -l
来获取行数并将输出打印到stdout,awk
然后用于求和变量s
中第1列的所有输出只会在末尾打印出来:END {print s}
如果你想在最后得到单词和总和,你可以使用:
find . -name "*.go" -exec wc {} \; | \
awk '{s+=$1; w+=$2} {print $1, $2, $4} END {print "Total:", s, w}'
希望这可以让您了解如何根据输入对数据进行格式化,求和等。