我试图找到这个命令的原因,因为我知道非常基本的我发现
last | cut -d" " -f 1 | sort | uniq -c | sort
last
=上次搜索文件/ var / log / wtmp(或-f标志指定的文件)并显示自该文件创建以来登录(和退出)的所有用户的列表。
cut
将显示所需的列。
选项-d
指定输入文件中使用的字段分隔符。
-f
指定要提取的字段
1是输出我认为我不确定
它正在排序,然后是
Uniq
命令有助于删除或检测文件中的重复条目。本教程介绍了一些您可能会发现有用的最常用的uniq命令行选项。
如果有人能解释这个命令并解释为什么有两种我会很感激。
答案 0 :(得分:3)
您对cut
的解释是正确的:cut -d" " -f1
(f
之后无需空格)获取基于{{1的流的第一个f
字段}} elimiter d
(空格)。
那么为什么" "
?
来自sort | uniq -c | sort
:
注意:' uniq'除非它们相邻,否则不检测重复的线。 您可能希望先对输入进行排序,或使用'排序-u'没有' uniq'。 此外,比较遵守< LC_COLLATE'。
指定的规则
这就是为什么在管道到man uniq
之前需要对线进行排序的原因。最后,由于uniq
输出未排序,您需要再次排序以查看最重复的项目。
查看包含重复项目的给定文件的uniq
和sort
示例:
uniq -c
请注意,您可以与此awk一起执行$ 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
:
sort | uniq -c
这将在last | awk '{a[$1]++} END{for (i in a) print i, a[i]}'
数组中存储第一列的值,并在发现更多时增加计数器。在a[]
块中,它打印结果,未排序,因此您可以再次管道到END{}
。
答案 1 :(得分:0)
uniq -c用于创建频率直方图。第二种排序的原因是您按频率顺序对直方图进行排序。
第一种排序的原因是uniq只是在判断该行是否唯一时才将每一行与之前的行进行比较。