我想帮助我的女朋友 - 她需要大约200个文件(每个文件)中某些字符的具体数量。
我已找到How can I use the UNIX shell to count the number of times a letter appears in a text file?,但这只显示完整的数字,而不是每个文件的出现次数。基本上,我想要的是以下内容:
$ ls
test1 test2
$ cat test1
ddddnnnn
ddnnddnnnn
$ cat test2
ddnnddnnnn
$ grep -o 'n' * | wc -w
16
$ <insert command here>
test1 10
test2 6
$
关于输出的或类似的东西。由于这将在她的大学机器上,我无法在perl中编写任何代码,只允许shell。我的shell知识有点生疏,所以我无法想出更好的解决方案 - 也许你可以提供帮助。
答案 0 :(得分:2)
grep -Ho n * | uniq -c
产生
10 test1:n
6 test2:n
如果您想要完全输出:
grep -Ho n * | uniq -c | while read count file; do echo "${file%:n} $count"; done
答案 1 :(得分:0)
这不是很优雅,但最明显的解决方案是:
letter='n'
for file in *; do
count=`grep -o $letter "$file" | wc -w`
echo "$file contains $letter $count times"
done
答案 2 :(得分:0)
grep -H -o
请参阅:http://pubs.opengroup.org/onlinepubs/009604499/utilities/grep.html
获取您想要的文件列表list.txt。我无缘无故地选择了字符^ == shift 6
while read fname
do
cnt=`tr -dc '^' < $fname | wc -c`
echo "$fname: $cnt"
done < list.txt