Unix 计算每个目录中的行数
我有一个目录结构如下 输出/a/1/多文件Unix 计算每个目录中的行数,unix,awk,xargs,wc,Unix,Awk,Xargs,Wc,我有一个目录结构如下 输出/a/1/多文件 输出/a/2/多文件 输出/a/3/多文件 输出/b/1/多文件 输出/b/2/多文件 输出/b/3/多文件 我想知道每个目录的行数。因此,基本上,每个最内层目录级别的行数,而不是文件级别的行数。最里面的目录1、2、3是我们为分析生成的不同类型的输出,其中包含多个hadoop part xxxx文件 我移动到输出目录并尝试了下面的命令 find . -maxdepth 2 -type d -name '*' | awk -F "/" 'NF==3' |
输出/a/2/多文件
输出/a/3/多文件
输出/b/1/多文件
输出/b/2/多文件
输出/b/3/多文件 我想知道每个目录的行数。因此,基本上,每个最内层目录级别的行数,而不是文件级别的行数。最里面的目录1、2、3是我们为分析生成的不同类型的输出,其中包含多个hadoop part xxxx文件 我移动到输出目录并尝试了下面的命令
find . -maxdepth 2 -type d -name '*' | awk -F "/" 'NF==3' | awk '{print $0"/*"}' | xargs wc -l
但我得到了一个错误
wc: ./a/1/*: No such file or directory
wc: ./a/2/*: No such file or directory
wc: ./a/3/*: No such file or directory
但是如果我尝试
wc -l ./a/1/*
我得到了该特定文件夹的正确输出
我错过了什么
编辑:
我更新了我的命令如下,以删除不必要的awk命令
find . -mindepth 2 -maxdepth 2 -type d -name '*' | xargs wc -l
这同样会导致错误
wc: ./a/1: Is a directory
wc: ./a/2: Is a directory
wc: ./a/2: Is a directory
尝试执行[code>execdir,例如:
find . -maxdepth 2 -type f -execdir wc -l {} \;
这将仅在找到该文件的目录中运行命令wc-l{}
,从man:
-execdir The -execdir primary is identical to the -exec primary with
the exception that utility will be executed from the
directory that holds the current file.
.a/1/*
不同于/a/1/*
(
后的斜杠)。。。您能解释一下find输出上的awk命令的用途吗?-mindepth
没有帮助吗?诸如*
之类的全局通配符被xargs解释为原样,没有展开,因此出现了错误。您是否尝试对每个目录中所有文件中的行数求和,或者,您是在尝试计算每个目录中的文件数,还是在计算每个目录中的文件和目录数,或者其他?请将您的问题包含在简明、可测试的示例输入和预期输出中,以澄清您目前正在尝试执行的操作。我们需要尝试找出您想要执行的操作是一个脚本,该脚本不执行您想要执行的操作@EdMorton:每个最里面的子目录都是我们生成的某个分析文件的输出,这个最里面的目录有多个hadoop part xxxx文件,所以我需要计算每个分析文件填充的记录数,并需要发送该值以供进一步验证。@Sundeep:更新了我的qsn,谢谢。在find之后使用awk的目的是,当我运行find时,列出所有目录和子目录。是-mindepth将有助于排除最上面的目录。查找-mindepth 2-maxdepth 3-type f-execdir wc-l{};这部分起作用,但为每个值提供计数。是否有任何方法可以获取整个目录的计数,但不能获取单个文件的计数。@a Hinay可能会将输出传送到awk,例如:|awk'{sum+=$1}END{print sum}'