我正在尝试计算项目中写的字数。文件夹中有几个层次,文本文件很多。
任何人都可以帮我找到一个快速的方法吗?
bash或vim会很好!
由于
答案 0 :(得分:8)
使用find
扫描目录树,wc
将完成剩下的工作
$ find path -type f | xargs wc -w | tail -1
最后一行给出了总数。
答案 1 :(得分:3)
您可以找到并打印所有内容和管道到wc
:
find path -type f -exec cat {} \; -exec echo \; | wc -w
注意:如果文件没有以换行符结尾,则需要-exec echo \;
,在这种情况下,一个文件的最后一个单词和下一个文件的第一个单词将不会分开。 / p>
或者您可以找到wc
并使用awk汇总计数:
find . -type f -exec wc -w {} \; | awk '{ sum += $1 } END { print sum }'
答案 2 :(得分:2)
tldr;
if(getActivity()!=null) { viewPager.setAdapter(....youradapter); }
说明:
$ find . -type f -exec wc -w {} + | awk '/total/{print $1}' | paste -sd+ | bc
将对find . -type f -exec wc -w {} +
(当前工作目录)包含的所有文件(递归地)运行wc -w
。 .
将尽可能少地执行find
,但必须多次执行以符合wc
---系统命令长度限制。当文件数量(和/或其组成长度)超过ARG_MAX
时,ARG_MAX
会多次调用find
,提供多个wc -w
行:
total
通过仅打印每个$ find . -type f -exec wc -w {} + | awk '/total/{print $0}'
8264577 total
654892 total
1109527 total
149522 total
174922 total
181897 total
1229726 total
2305504 total
1196390 total
5509702 total
9886665 total
行的第一个以空格分隔的字段来隔离这些部分总和:
total
$ find . -type f -exec wc -w {} + | awk '/total/{print $1}'
8264577
654892
1109527
149522
174922
181897
1229726
2305504
1196390
5509702
9886665
使用paste
分隔符的部分和来给出中缀求和:
+
使用$ find . -type f -exec wc -w {} + | awk '/total/{print $1}' | paste -sd+
8264577+654892+1109527+149522+174922+181897+1229726+2305504+1196390+5509702+9886665
评估中缀求和,它支持中缀表达式和任意精度:
bc
参考文献:
答案 3 :(得分:1)
如果我从SO上的所有bash问题中学到了一件事,那么带有空格的文件名会让你感到困惑。即使文件名中有空格,此脚本也能正常工作。
#!/usr/bin/env bash
shopt -s globstar
count=0
for f in **/*.txt
do
words=$(wc -w "$f" | awk '{print $1}')
count=$(($count + $words))
done
echo $count
答案 4 :(得分:0)
假设您不需要递归计算单词,并且希望将所有文件包括在当前目录中,则可以使用一种简单的方法,例如:
wc -l *
10 000292_0
500 000297_0
510 total
如果只想计算当前目录中特定扩展名的单词,可以尝试:
cat *.txt | wc -l