我有一个关于bash脚本的问题,让我们说有文件女巫包含行,每行会有一个文件路径和一个日期,问题是如何找到最常见的路径。
提前致谢。
答案 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详细讨论了这一点。