微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

uniq -c | sort -nr

这会产生这样的输出

809 23/Dec/2008:19:20

实际上计数的第一个字段是我的问题….我想从上面的输出得到ony的date,但米无法得到这个。 我试图使用切割命令,并做到了这一点

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

但这只是打印空白…请有人可以帮助我获得date,并砍掉计数。 我只想要

find两个文件间的差异最快的方法

bash:合并由数字文件名sorting的文本文件

Shell脚本 – SFTP – >如果复制,删除

我将如何实现searchfunction来查找文件或目录

壳shell内的shell脚本

23/Dec/2008:19:20

谢谢

bash:无法执行二进制文件:即使二进制文件和Linux是64位,也会执行格式错误

为什么我的Python脚本不能写入文件

在terminal/ Linux上查找包含特定date范围文件名的所有文件

如何在文本文件中包含带有模式的string的行末尾添加文本?

检查返回值的shell方法错误代码

除非计数超过7位数,否则来自uniq的计数前面是空格,所以您需要执行如下操作:

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]* //'

不要cut -d' ' -f2 ,请尝试

awk '{$1="";print}'

也许你需要在开始时删除一个空白:

awk '{$1="";print}' | sed 's/^.//'

或用sed完成,保留原来的空白区域:

sed -r 's/^[^0-9]*[0-9]+//'

另一种解决方案是这样的:

uniq -c | sort -nr | awk '{print $1,$2}'

也可以轻松打印单个字段。

如果你想使用下游的计数字段,下面的命令将把它重新格式化为一个'管道友好'制表符分隔的格式,而不需要填充左边的内容

.. | sort | uniq -c | sed -r 's/^ +([0-9]+) /1t/'

对于原始任务来说,这是一个矫枉过正的问题,但在重新格式化之后,可以使用cut来删除该字段,正如OP所期望的那样:

.. | sort | uniq -c | sed -r 's/^ +([0-9]+) /1t/' | cut -d $'t' -f2-

将tr -s添加到管道链中以将多个空间“挤”到一个空格分隔符中:

uniq -c | tr -s ' ' | cut -d ' ' -f3

tr在一些不起眼的地方非常有用。 不幸的是,它并没有摆脱第一个领先的空间,因此-f3

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐