Linux uniq 命令:重复项过滤

LinuxBeginner
立即练习

介绍

在本实验中,我们将探索 Linux 中的 uniq 命令。这是一个用于识别和过滤文本文件中重复行的强大工具。我们将模拟一个场景:你是一家电子商务公司的数据分析师,负责分析客户的购买数据。uniq 命令将帮助你高效地处理这些数据,从而为你提供有关客户行为的有价值见解。

查看原始客户数据

首先,让我们查看原始的客户购买数据。这些数据代表了客户的日常购买记录。

首先,我们需要进入项目目录。在 Linux 中,我们使用 cd 命令来切换目录。波浪号(~)是一个代表你家目录的快捷方式。

cd ~/project

此命令将当前工作目录更改为 /home/labex/project。现在我们已经进入了正确的目录,让我们查看客户数据文件的内容。我们将使用 cat 命令(concatenate 的缩写),它通常用于显示文件的内容。

cat customer_purchases.txt

你应该会看到类似如下的输出:

Alice,Electronics
Bob,Books
Charlie,Clothing
Alice,Electronics
David,Home Goods
Bob,Books
Eve,Toys
Charlie,Clothing
Frank,Sports
Alice,Electronics

该文件包含客户姓名及其购买的商品类别,其中一些客户进行了多次购买。每一行代表一笔交易,包含客户姓名和购买类别,中间用逗号分隔。

对数据进行排序

在有效使用 uniq 命令之前,我们需要对数据进行排序。uniq 命令只能处理相邻的重复行,因此排序可以确保所有重复的条目都排列在一起。

我们将使用 sort 命令按字母顺序对客户数据进行排序:

sort customer_purchases.txt > sorted_purchases.txt

让我们分解一下这个命令:

  • sort 是用于对文本行进行排序的命令。
  • customer_purchases.txt 是我们要排序的输入文件。
  • > 是重定向操作符。它将左侧命令的输出写入右侧的文件中。
  • sorted_purchases.txt 是保存排序后数据的新文件。

现在,让我们查看排序后文件的内容:

cat sorted_purchases.txt

你应该会看到类似如下的输出:

Alice,Electronics
Alice,Electronics
Alice,Electronics
Bob,Books
Bob,Books
Charlie,Clothing
Charlie,Clothing
David,Home Goods
Eve,Toys
Frank,Sports

请注意,现在的条目已按客户姓名的字母顺序排列。这种排序方式将同一客户的所有购买记录聚集在一起,这对于接下来的步骤至关重要。

使用 uniq 删除重复条目

现在数据已经排好序,我们可以使用 uniq 命令来删除重复条目。这将为我们提供一份唯一的客户购买清单。

运行以下命令:

uniq sorted_purchases.txt unique_purchases.txt

让我们分解一下这个命令:

  • uniq 是用于过滤文件中重复行的命令。
  • sorted_purchases.txt 是我们的输入文件(已排序的数据)。
  • unique_purchases.txt 是保存结果的输出文件。

uniq 命令从 sorted_purchases.txt 中读取排序后的数据,删除相邻的重复行,并将结果保存在名为 unique_purchases.txt 的新文件中。

现在,让我们查看新文件的内容:

cat unique_purchases.txt

你应该会看到类似如下的输出:

Alice,Electronics
Bob,Books
Charlie,Clothing
David,Home Goods
Eve,Toys
Frank,Sports

现在我们得到了一份唯一的客户购买清单,每个客户只出现一次。这让我们能够清晰地看到所购买的不同商品类型,而没有重复信息。

使用 uniq -c 统计购买次数

当我们使用 uniq 命令的选项时,它会变得更加强大。让我们使用 -c 选项来统计每个客户的购买次数。

运行以下命令:

uniq -c sorted_purchases.txt purchase_counts.txt

让我们分解一下这个命令:

  • uniq 是我们过滤重复行的命令。
  • -c 是一个选项,告诉 uniq 在行首加上该行出现的次数。
  • sorted_purchases.txt 是我们的输入文件。
  • purchase_counts.txt 是保存结果的输出文件。

此命令统计每个唯一行出现的次数,并将结果保存在 purchase_counts.txt 中。

现在,让我们查看这个新文件的内容:

cat purchase_counts.txt

你应该会看到类似如下的输出:

   3 Alice,Electronics
   2 Bob,Books
   2 Charlie,Clothing
   1 David,Home Goods
   1 Eve,Toys
   1 Frank,Sports

每行开头的数字表示该客户进行购买的次数。例如,Alice 购买了 3 次电子产品(Electronics),而 Frank 购买了 1 次体育用品(Sports)。

使用 uniq -d 查找重复购买的客户

作为一名数据分析师,你可能对识别回头客感兴趣。我们可以使用 uniq 命令的 -d 选项来仅显示重复行,这些行代表了进行了多次购买的客户。

运行以下命令:

uniq -d sorted_purchases.txt repeat_customers.txt

让我们分解一下这个命令:

  • uniq 是我们过滤重复行的命令。
  • -d 是一个选项,告诉 uniq 仅打印重复的行。
  • sorted_purchases.txt 是我们的输入文件。
  • repeat_customers.txt 是保存结果的输出文件。

此命令识别 sorted_purchases.txt 中的重复行,并将其保存到 repeat_customers.txt 中。

让我们查看这个新文件的内容:

cat repeat_customers.txt

你应该会看到类似如下的输出:

Alice,Electronics
Bob,Books
Charlie,Clothing

这些就是进行了多次购买的客户。这些信息对于客户忠诚度计划或精准营销活动非常有价值。

总结

在本实验中,我们探索了 Linux 中的 uniq 命令及其在分析客户购买数据中的应用。我们学习了如何:

  1. 通过先对数据进行排序,为使用 uniq 做好准备。
  2. 使用 uniq 从排序后的文件中删除重复条目。
  3. 使用 uniq -c 统计每个唯一行出现的次数。
  4. 使用 uniq -d 识别重复行。

这些技能对于数据分析任务非常宝贵,可以帮助你高效地处理大型数据集并从中提取见解。

本实验未涵盖的其他 uniq 命令选项包括:

  • -u:仅显示唯一的行(仅出现过一次的行)。
  • -i:比较行时忽略大小写。
  • -f N:比较行时跳过前 N 个字段。
  • -s N:比较行时跳过前 N 个字符。