这是一项作业,因此请为我指明正确的方向。
我有一堆消息文件。每条消息都会发送给某人,因此每个文件都将包含一个字符串,例如“收件人:John Smith”、“收件人:Jane Doe”......
我想计算发送给每个人的文件数量并打印
我知道我们可以计算有多少个文件包含一个名称
grep -lr "name" directoryPath | wc -l
问题:
我不确定如何在计算邮件数量之前找到每个唯一的收件人。
我想我也许可以制作一个临时文件来存储姓名和计数,这样我就可以每次检查收件人是否是新的。我确信有更好的方法
最佳答案
您收到的评论包含完成此作业所需的内容。以下是将它们组合在一起的方法:
grep -hr To: directoryPath | sort | uniq -c
grep 将搜索 DirectoryPath 及以下的所有文件中包含“To:”的行并显示它们。 -r 指示 grep 递归搜索所有目录,而 -h 则抑制 grep 输出中的文件名。
我们必须使用排序将所有相同的名称放在一起。这设置了由 uniq -c 计数的输出(这需要对输入进行排序以满足您的要求)。
在不使用管道的情况下尝试上述命令以了解输出是什么。例如,试试这个:
grep -r To: directoryPath
并将其与此进行比较:
grep -hr To: directoryPath
然后尝试看看在不进行排序的情况下使用 uniq -c 会发生什么:
grep -hr To: directoryPath | uniq -c
或者尝试独特的排序功能,看看它如何影响结果:
grep -hr To: directoryPath | sort -u
简而言之,如果您想学习这些 Material ,请尝试使用各种参数,看看为什么答案有效。
顺便说一句,我还没有测试过我对你的回答。大多数发帖人都会用测试数据和预期结果示例来提出他们的问题。然后发帖者可以确认他们的解决方案正确回答了问题。在这种情况下,我只是根据我的经验对您的需求进行猜测。
关于linux - 计算有多少个文件有字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53139394/