我一直在努力使我编写的脚本更简单,更简单.
有许多方法可以编写文件夹中所有文件的字数,甚至是文件夹子目录的所有文件.
例如,我可以写
wc */*
Run Code Online (Sandbox Code Playgroud)
我可能得到这样的输出(这是所需的输出):
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
Run Code Online (Sandbox Code Playgroud)
但如果文件太多,我可能会收到如下错误消息:
-bash: /usr/bin/wc: Argument list too long
Run Code Online (Sandbox Code Playgroud)
所以,我可以创建一个变量,一次做一个文件夹,如下所示:
while read $FOLDER
do
wc $FOLDER/* >> outfile.txt
done < "$FOLDER_LIST"
Run Code Online (Sandbox Code Playgroud)
所以这就是从一行到5行.
此外,在一种情况下,我想先使用grep -v,然后进行单词计数,如下所示:
grep -v dbsnp */* | wc
Run Code Online (Sandbox Code Playgroud)
但这会有两个错误:
所以,回顾一下,我希望能够做到这一点:
grep -v dbsnp */* wc > Outfile.txt
awk '{print $4,$1} Outfile.txt > Outfile.summary.txt
Run Code Online (Sandbox Code Playgroud)
让它像我上面所示的那样返回输出.
有一个非常简单的方法来做到这一点?或者我正在寻找一个最小的循环?再一次,我知道有101种方法可以像我们其他人一样使用4-10行脚本,但我希望能够在命令提示符中输入2个单行...我对shell的了解是还不够深入,知道哪些方式可以让我对操作系统的要求.
编辑 -
提出了一个解决方案:
find -exec grep -v dbsnp {} \; | xargs -n 1 wc
Run Code Online (Sandbox Code Playgroud)
此解决方案导致以下输出:
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 .
Run Code Online (Sandbox Code Playgroud)
就我所知,似乎将每一行都视为一个文件.我还在回顾其他答案,谢谢你的帮助.
您提到“这并不能解决逐项归还厕所的问题”
以下将:
find -exec wc {} \;
Run Code Online (Sandbox Code Playgroud)
但这不会随您的grep过滤器一起提供"grep -v"
如果您打算按照我对此答案的评论进行操作,请检查以下内容是否适合您:
find -exec bash -c "echo -n {}; grep -v dbsnp {} | wc " \;
Run Code Online (Sandbox Code Playgroud)