我一直在努力使我写的脚本变得越来越简单。
有很多种方法可以获取文件夹中所有文件的单词数,甚至一个文件夹的子目录中的所有文件。
例如,我可以写
wc */* 我可能得到这样的输出(这是所需的输出):
0 0 0 10.53400000/YRI.GS000018623.NONSENSE.vcf
0 0 0 10.53400000/YRI.GS000018623.NONSTOP.vcf
0 0 0 10.53400000/YRI.GS000018623.PFAM.vcf
0 0 0 10.53400000/YRI.GS000018623.SPAN.vcf
0 0 0 10.53400000/YRI.GS000018623.SVLEN.vcf
2 20 624 10.53400000/YRI.GS000018623.SVTYPE.vcf
2 20 676 10.53400000/YRI.GS000018623.SYNONYMOUS.vcf
13 130 4435 10.53400000/YRI.GS000018623.TSS-UPSTREAM.vcf
425 4250 126381 10.53400000/YRI.GS000018623.UNKNOWN-INC.vcf但是,如果文件太多,我可能会收到如下错误消息:
-bash: /usr/bin/wc: Argument list too long因此,我可以创建一个变量,一次只做一个文件夹,如下所示:
while read $FOLDER
do
wc $FOLDER/* >> outfile.txt
done < "$FOLDER_LIST"从一行到第五行,就像这样。
此外,在一种情况下,我想首先使用grep -v,然后执行单词计数,如下所示:
grep -v dbsnp */* | wc但这将受到两个错误的影响:
因此,简单地说,我很乐意这样做:
grep -v dbsnp */* wc > Outfile.txt
awk '{print $4,$1} Outfile.txt > Outfile.summary.txt让它像上面显示的那样返回输出。
有什么很简单的方法吗?还是我至少在看一个循环?同样,我知道101种方法,就像我们使用4-10行脚本一样,但我希望能够只在命令prompt...and中键入2行代码--我对shell的了解还不够深入,无法知道我对操作系统的要求是什么。
编辑-
提出了一项解决办法:
find -exec grep -v dbsnp {} \; | xargs -n 1 wc此解决方案将产生以下输出:
wc: 1|0:53458644:AMBIGUOUS:CCAGGGC|-16&GCCAGGGCCAGGGC|-18&GCCAGGGCC|-19&GGCCAGGGC|-19&GCCAGGGCG|-19,.:48:48,48:4,4:0,17:-48,0,-48:0,0,-17:27:3,24:24: No such file or directory
wc: 10: No such file or directory
wc: 53460829: No such file or directory
wc: .: Is a directory
0 0 0 .
wc: AA: No such file or directory
wc: CT: No such file or directory
wc: .: Is a directory
0 0 0 .
wc: .: Is a directory
0 0 0 .据我所知,似乎每一行都是一个文件。我还在复习其他的答案,谢谢你的帮助。
发布于 2014-06-05 07:24:01
您提到,“这并不能解决逐项返回wc的问题”。
下列遗嘱:
find -exec wc {} \;但这不会随你的grep过滤器"grep -v"
如果你打算按照我对这个答复的评论做同样的事,那么请检查以下是否对你有用:
find -exec bash -c "echo -n {}; grep -v dbsnp {} | wc " \;发布于 2014-06-05 06:20:12
*/*的匹配太多了,所以grep会收到一个长的参数列表。您可以使用find来规避这一问题:
find -exec grep -v dbsnp {} \; | wc也许您也希望消除可能的遍历错误:
find -exec grep -v dbsnp {} \; 2> /dev/null | wc发布于 2014-06-05 06:39:43
这对我来说很管用:
grep -or "[a-zA-Z]*" * | cut -d":" -f2 | sort | uniq -c你要看的是MapReduce算法http://en.wikipedia.org/wiki/MapReduce
https://stackoverflow.com/questions/24052876
复制相似问题