gpt4 book ai didi

linux - 使用 "uniq -c"命令时需要从输出中删除计数

转载 作者:IT王子 更新时间:2023-10-29 00:39:48 26 4
gpt4 key购买 nike

我正在尝试读取文件并按特定字段的出现次数对其进行排序。假设我想从日志文件中找出重复次数最多的日期,然后我使用 uniq -c 选项并按降序对它进行排序。像这样的东西

uniq -c | sort -nr 

这将产生这样的输出 -

809 23/Dec/2008:19:20

实际上是计数的第一个字段对我来说是个问题....我想从上面的输出中获取日期,但我无法获取它。我尝试使用 cut 命令并执行此操作

uniq -c | sort -nr | cut -d' ' -f2 

但这只会打印空白...请有人帮我只获取日期并取消计数。我只要

23/Dec/2008:19:20

谢谢

最佳答案

uniq 的计数前面有空格,除非计数中的数字超过 7 位,因此您需要执行以下操作:

uniq -c | sort -nr | cut -c 9-

获取第 9 列(字符位置)。或者你可以使用 sed:

uniq -c | sort -nr | sed 's/^.\{8\}//'

或:

uniq -c | sort -nr | sed 's/^ *[0-9]* //'

面对 10,000,000 或更多的重复计数,第二个选项是可靠的;如果您认为这可能是个问题,它可能比 cut 替代方案更好。毫无疑问,还有其他选择。


警告:计数是通过在 Mac OS X 10.7.3 上进行的实验确定的,但使用的是来自 coreutils 8.3 的 GNU uniq。 BSD uniq -c 在单个数字计数之前产生了 3 个前导空格。 POSIX 规范表示 uniq -c 的输出应格式化为:

printf("%d %s", repeat_count, line);

没有任何前导空格。考虑到输出格式的这种可能差异,使用 [0-9] 正则表达式的 sed 脚本是处理来自 uniq -c:

uniq -c | sort -nr | sed 's/^ *[0-9]* //'

关于linux - 使用 "uniq -c"命令时需要从输出中删除计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10084090/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com