切割中的分隔符是什么意思,为什么在这个命令中它是两次排序?

时间:2014-03-21 10:40:06

标签: linux sorting unix cut uniq

我试图找到这个命令的原因,因为我知道非常基本的我发现

last | cut -d" " -f 1 | sort | uniq -c | sort

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

cut将显示所需的列。

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

-f指定要提取的字段

1是输出我认为我不确定

它正在排序,然后是

Uniq命令有助于删除或检测文件中的重复条目。本教程介绍了一些您可能会发现有用的最常用的uniq命令行选项。

如果有人能解释这个命令并解释为什么有两种我会很感激。

2 个答案:

答案 0 :(得分:3)

您对cut的解释是正确的:cut -d" " -f1f之后无需空格)获取基于{{1的流的第一个f字段}} elimiter d(空格)。

那么为什么" "

来自sort | uniq -c | sort

  

注意:' uniq'除非它们相邻,否则不检测重复的线。   您可能希望先对输入进行排序,或使用'排序-u'没有' uniq'。   此外,比较遵守< LC_COLLATE'。

指定的规则

这就是为什么在管道到man uniq之前需要对线进行排序的原因。最后,由于uniq输出未排序,您需要再次排序以查看最重复的项目。


查看包含重复项目的给定文件的uniqsort示例:

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只是在判断该行是否唯一时才将每一行与之前的行进行比较。