免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3463 | 回复: 1
打印 上一主题 下一主题

[文本处理] 求教一下统计目录下所有文件中符合条件的行数 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-01-26 15:03 |显示全部楼层 |倒序浏览
本帖最后由 响亮的名字 于 2016-01-27 09:06 编辑

现有一个文件夹,里面大约20000个文件,每个文件中都有N行数据,现在需要统计每个文件下包含某特定字符串(如【啊啊啊】)的行数,最终汇出到一个文件
文件格式为:
文件名  行数
1.txt    20


for循环和while read line用得还不是很熟(没有编程基础),shell是为了处理网站日志现学现卖的

我暂时是这样做的


cd F:/txt/
ls >../list.txt
#list.txt里面会有乱码……不知道为什么,于是只好手动把乱码的东西替换掉。
cat ../list.txt|while read line
do
cat $line|grep -a '啊啊啊'|wc -l|sed "s/^/$line  /g"
done
>../ok.txt

试了很多次才不报错……但是我有些地方不太明白
(1)为什么ls导出文件会有乱码呢?而ls直接在cygwin里面显示就没有。
(2)不太明白程序是怎么执行的,是先读第一行,开始DO第一次,DONE后继续读第二行……知道都读完了,再写入到文件里吗?
是否可以没读一行都以>>的方式写入到文件里呢?
(3)最后发现没有得到想要的文件……虽然过程都在cygwin命令行里面显示出来了,但是没有存入到文件里,求教

我是个小白,真心求教导T^T


后来一个朋友告诉我这个
cd 目录
awk '{if($0~/啊啊啊/)print FILENAME}' *.log|uniq -c
打开所有文件,通过if语句判断是否一行($0)同时匹配字符串【啊啊啊】,如果是则输出文件名到行……这样,会得到一个文件,每行都是文件名,通过uniq -c根据文件名的出现次数来获得各自文件中符合条件的行有多少个。
这个算法应该是比较科学的,效率应该比我那个要好多了,捂脸逃

论坛徽章:
0
2 [报告]
发表于 2016-01-26 15:48 |显示全部楼层
本帖最后由 响亮的名字 于 2016-01-26 15:52 编辑

回复 5# ydzcjj


路径的确是有中文,ls我单独处理了下,存入了list文件。
我后来自己重新写了下,发现搞定了,就是效率有点低

cd f:/hhhh
cat ../list.txt|while read line;do cat "$line"|grep '啊啊啊'|wc -l|sed "s/^/$line  /g";done >../ok.txt
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP