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