1. Learn
  2. /
  3. 课程
  4. /
  5. Shell 入门

Connected

道练习

如何去除重复的行?

另一个常与 sort 搭配使用的命令是 uniq, 它的作用是删除重复的行。 更准确地说, 它只会删除「相邻」的重复行。 如果文件内容是:

2017-07-03
2017-07-03
2017-08-03
2017-08-03

那么 uniq 会输出:

2017-07-03
2017-08-03

但如果文件内容是:

2017-07-03
2017-08-03
2017-07-03
2017-08-03

那么 uniq 将打印这四行全部内容。 原因是 uniq 旨在处理非常大的文件。 为了从文件中删除不相邻的重复行, 它必须把整个文件保存在内存中 (或者至少, 保留到目前为止出现过的所有唯一行)。 只删除相邻的重复行时, 它只需在内存中保留最近的一行唯一内容即可。

说明

100 XP

编写一条管道以:

  • 从 seasonal/winter.csv 获取第 2 列,
  • 从输出中去掉单词 "Tooth",只保留牙齿名称,
  • 对输出进行排序,使相同的牙齿名称相邻;以及
  • 每个牙齿名称仅显示一次,并附带其出现次数。

您的管道开头与上一个练习相同:

cut -d , -f 2 seasonal/winter.csv | grep -v Tooth

在此基础上添加一个 sort 命令,并使用 uniq -c 来显示唯一行及其出现次数,而不是分别使用 uniq 和 wc。