Linux uniq 命令:重复数据过滤

LinuxLinuxBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") linux/TextProcessingGroup -.-> linux/sort("Text Sorting") linux/TextProcessingGroup -.-> linux/uniq("Duplicate Filtering") subgraph Lab Skills linux/cat -.-> lab-219199{{"Linux uniq 命令:重复数据过滤"}} linux/cd -.-> lab-219199{{"Linux uniq 命令:重复数据过滤"}} linux/sort -.-> lab-219199{{"Linux uniq 命令:重复数据过滤"}} linux/uniq -.-> lab-219199{{"Linux uniq 命令:重复数据过滤"}} end

检查原始客户数据

让我们从检查原始客户购买数据开始。这些数据代表了客户每日的购买记录。

首先,我们需要导航到项目目录。在 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 次电子产品,而 Frank 购买了 1 次体育用品。

使用 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 个字符

资源