如何在文件中找到最常见的字符串

时间:2015-03-17 12:44:17

标签: bash

我有一个关于bash脚本的问题,让我们说有文件女巫包含行,每行会有一个文件路径和一个日期,问题是如何找到最常见的路径。

提前致谢。

2 个答案:

答案 0 :(得分:2)

这是一个建议

$ cut -d' ' -f1 file.txt | sort | uniq -c | sort -rn | head -n1
# \_____________________/  \__/   \_____/   \______/   \_______/
# select the file column   sort    print     sort on    print top
#                          files   counts    count       result

使用示例:

$ cat file.txt 
/home/admin/fileA jan:17:13:46:27:2015
/home/admin/fileB jan:17:13:46:27:2015
/home/admin/fileC jan:17:13:46:27:2015
/home/admin/fileA jan:17:13:46:27:2015
/home/admin/fileA jan:17:13:46:27:2015
$ cut -d' ' -f1 file.txt | sort | uniq -c | sort -rn | head -n1
       3 /home/admin/fileA

您可以通过另一个3从最终结果中删除cut

答案 1 :(得分:1)

反转线条,削减开始(日期),再次反转它们,然后对独特线条进行排序和计数:

cat file.txt | rev | cut -b 22- | rev | sort | uniq -c

如果您确定自己的路径中没有空格,则可以完全避免rev

cat file.txt | cut -d " " -f 1 | sort | uniq -c

如果输出太长而无法直观检查,aioobe建议使用sort -rn | head -n1进行此操作将为您提供良好的服务


正如aioobe所提到的,值得注意的是,许多unix命令可选地采用文件参数。通过使用它,您可以在开头避免使用额外的cat命令,方法是将其参数提供给下一个命令:

cat file.txt | rev | ... vs rev file.txt | ...

虽然我个人觉得第一个选项更易于记忆和理解,但第二个选项更受许多(大多数?)人的青睐,因为它节省了系统资源(特别是额外进程使用的内存和引用)并且可以在某些特定用例中具有更好的性能。 Wikipedia's cat article详细讨论了这一点。