首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cut中的分隔符是什么意思?为什么在此命令中它要排序两次?

问cut中的分隔符是什么意思?为什么在此命令中它要排序两次?
EN

Stack Overflow用户
提问于 2014-03-21 18:40:06
回答 2查看 616关注 0票数 0

我试图找出这个命令的原因,因为我知道很基本,我发现

代码语言:javascript
复制
last | cut -d" " -f 1 | sort | uniq -c | sort

last =上次搜索文件/var/log/wtmp (或由var标志指定的文件),并显示自创建该文件以来登录(和注销)的所有用户的列表。

cut用于显示所需的列。

选项-d指定输入文件中使用的字段分隔符。

-f指定要提取的字段

1是我想我不确定的输出

它在排序,然后它是

Uniq命令有助于删除或检测文件中的重复条目。本教程解释了几个最常用的uniq命令行选项,您可能会发现这些选项很有帮助。

如果有人能解释这个命令,并解释为什么有两种排序,我将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2014-03-21 18:46:06

您对空格的解释是正确的:cut -d" " -f1 (在f之后不需要空格)根据空格限制符" " (f)获取流的第一个空格字段。

那为什么是sort | uniq -c | sort呢

来自man uniq

注意:'uniq‘不会检测重复行,除非它们是相邻的。您可能希望首先对输入进行排序,或者使用'sort -u‘而不使用'uniq’。此外,比较遵循'LC_COLLATE‘指定的规则。

这就是为什么在通过管道传输到uniq之前需要对行进行排序的原因。最后,由于未对uniq输出进行排序,因此需要再次排序才能首先看到重复次数最多的项目。

查看包含重复项的给定文件的sort和uniq -c示例:

代码语言:javascript
复制
$ seq 5 >>a
$ seq 5 >>a
$ cat a
1
2
3
4
5
1
2
3
4
5

$ sort a | uniq -c | sort <--- no repeated matches
      2 1
      2 2
      2 3
      2 4
      2 5

$ uniq -c a | sort <---- repeated matches
      1 1
      1 1
      1 2
      1 2
      1 3
      1 3
      1 4
      1 4
      1 5
      1 5

注意:您可以使用下面的awk一起执行sort | uniq -c:

代码语言:javascript
复制
last | awk '{a[$1]++} END{for (i in a) print i, a[i]}'

这将在a[]数组中存储第一列的值,并在找到更多值时增加计数器。在END{}块中,它打印未排序的结果,因此您可以再次通过管道连接到sort。

票数 3
EN

Stack Overflow用户

发布于 2014-03-21 18:48:56

uniq -c用于创建频率直方图。第二个排序的原因是您将按频率顺序对直方图进行排序。

第一种排序的原因是,uniq在决定行是否唯一时,只将每一行与前一行进行比较。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22556470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档