我试图找出这个命令的原因,因为我知道很基本,我发现
last | cut -d" " -f 1 | sort | uniq -c | sortlast =上次搜索文件/var/log/wtmp (或由var标志指定的文件),并显示自创建该文件以来登录(和注销)的所有用户的列表。
cut用于显示所需的列。
选项-d指定输入文件中使用的字段分隔符。
-f指定要提取的字段
1是我想我不确定的输出
它在排序,然后它是
Uniq命令有助于删除或检测文件中的重复条目。本教程解释了几个最常用的uniq命令行选项,您可能会发现这些选项很有帮助。
如果有人能解释这个命令,并解释为什么有两种排序,我将不胜感激。
发布于 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示例:
$ 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:
last | awk '{a[$1]++} END{for (i in a) print i, a[i]}'这将在a[]数组中存储第一列的值,并在找到更多值时增加计数器。在END{}块中,它打印未排序的结果,因此您可以再次通过管道连接到sort。
发布于 2014-03-21 18:48:56
uniq -c用于创建频率直方图。第二个排序的原因是您将按频率顺序对直方图进行排序。
第一种排序的原因是,uniq在决定行是否唯一时,只将每一行与前一行进行比较。
https://stackoverflow.com/questions/22556470
复制相似问题