Bash 我的shell脚本统计的文件比文件夹中的实际文件多?

Bash 我的shell脚本统计的文件比文件夹中的实际文件多?,bash,shell,unix,grep,Bash,Shell,Unix,Grep,我有一个shell脚本,它检查文件夹中的每个文件,查找单词“Author”,计算每个文件中Author出现的次数,并逐行打印出来。该数字的前缀为“hotel_u$i”,其中i在列表顶部为1,然后随着列表的深入而增加。这是我的剧本: #!/bin/bash paste <(printf 'hotel_%d\n' {1..825}) \ <(find . -type f -exec bash -c 'grep -wo "Author" {} | wc -l' \; | sort -nr)

我有一个shell脚本,它检查文件夹中的每个文件,查找单词
“Author”
,计算每个文件中Author出现的次数,并逐行打印出来。该数字的前缀为
“hotel_u$i”
,其中i在列表顶部为1,然后随着列表的深入而增加。这是我的剧本:

#!/bin/bash
paste <(printf 'hotel_%d\n' {1..825}) \
<(find . -type f -exec bash -c 'grep -wo "Author" {} | wc -l' \; | sort -nr)

我假设2 1和0是“额外”文件(可能不是),为什么它们会出现,我如何摆脱它们?我的文件夹中的文件怎么可能比实际显示的多

只需使用awk,例如,将GNU awk用于ENDFILE:

awk '/Author/{c++} ENDFILE{print "hotel_"ARGIND, c+0; c=0}' *
或者如果您的文件名为“hotel_*”:


如果这不符合您的要求,那么请编辑您的问题,以显示一些简洁、可测试的示例输入和预期输出,以便我们可以帮助您以正确的方式解决问题。您当前的方法是错误的。

只需使用awk,例如,将GNU awk用于ENDFILE:

awk '/Author/{c++} ENDFILE{print "hotel_"ARGIND, c+0; c=0}' *
或者如果您的文件名为“hotel_*”:

如果这不符合您的要求,那么请编辑您的问题,以显示一些简洁、可测试的示例输入和预期输出,以便我们可以帮助您以正确的方式解决问题。你目前的方法是错误的。

试试看

$ for e in hotel_{1..825}; do echo "$e"; grep -wo "Author" "$e" | wc -l; done
未经测试


如果要按匹配数对其进行排序,可以执行以下操作:

$ for e in hotel_{1..825}; do printf "$e "; printf "%d\n" $(grep -wo "Author" "$e" | wc -l); done | sort -nr -k 2
试试看

$ for e in hotel_{1..825}; do echo "$e"; grep -wo "Author" "$e" | wc -l; done
未经测试


如果要按匹配数对其进行排序,可以执行以下操作:

$ for e in hotel_{1..825}; do printf "$e "; printf "%d\n" $(grep -wo "Author" "$e" | wc -l); done | sort -nr -k 2

我对bash或Unix文件系统了解不多,但您复杂的命令是否会在某个时候变成临时文件(因为所有管道),1表示命令中出现“Author”的次数?零可能是目录条目本身(如果在Unix中是这样的话)。所有文件是在单个文件夹中还是在一组文件夹中?如果在单个文件夹中,只需使用glob
hotel.*
而不是find…
查找什么-键入f-print | wc-l
告诉你-825或828或其他什么?
ls | wc-l
也这么说吗?怎么样
find-类型d-打印
?我看你是在用这个问题的答案:。你问了那个问题并接受了你得到的第一个答案。您可能想在接受答案时稍等片刻,看看其他人是否有不同的建议-您得到的第一个答案可能并不总是最好的。@EdMorton如果您查看OP的问题历史,您会注意到他们问了许多密切相关的问题,总是基于他们得到的最后一个答案,我对bash或Unix文件系统知之甚少,但可能是因为您的复杂命令在某个时刻(由于所有管道)以临时文件的形式结束,而1表示您的命令中出现“Author”的次数?零可能是目录条目本身(如果在Unix中是这样的话)。所有文件是在单个文件夹中还是在一组文件夹中?如果在单个文件夹中,只需使用glob
hotel.*
而不是find…
查找什么-键入f-print | wc-l
告诉你-825或828或其他什么?
ls | wc-l
也这么说吗?怎么样
find-类型d-打印
?我看你是在用这个问题的答案:。你问了那个问题并接受了你得到的第一个答案。您可能想在接受答案时稍等片刻,看看其他人是否有不同的建议-您得到的第一个答案可能并不总是最好的。@EdMorton如果您查看OP的问题历史,您会注意到他们问了许多密切相关的问题,总是基于他们得到的最后一个答案,导致一些可能严重次优的总体“设计”。