📌  相关文章
📜  bash 从一个文件中返回不在另一个文件中的行 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 14:39:27.958000             🧑  作者: Mango

Bash 从一个文件中返回不在另一个文件中的行 - Shell-Bash

这篇文章将介绍如何使用shell脚本编写一个程序,该程序可以从一个文件中返回不在另一个文件中的行。我们将会使用Bash编程语言来完成这个任务。

问题描述

假设我们有两个文件:file1.txtfile2.txt。我们希望找出file1.txt中存在但file2.txt中不存在的行。也就是说,我们要返回file1.txt中的行,这些行在file2.txt中没有出现过。

解决方案

我们可以使用以下步骤来解决这个问题:

  1. 读取file1.txt的每一行并存储在一个数组中。
  2. 读取file2.txt的每一行,检查该行是否在第一步中创建的数组中存在。
  3. 如果某一行在数组中不存在,就将其打印出来。

下面是一个示例的Bash脚本来实现上述解决方案:

#!/bin/bash

file1="file1.txt"
file2="file2.txt"

# 读取file1.txt的每一行并存储在一个数组中
mapfile -t lines < "$file1"

# 读取file2.txt的每一行,检查是否在数组中存在
while IFS= read -r line || [ -n "$line" ]; do
    if ! [[ "${lines[@]}" =~ "$line" ]]; then
        echo "$line"
    fi
done < "$file2"

在这个脚本中,我们使用mapfile命令将file1.txt的每一行存储在名为lines的数组中。然后,我们使用while循环读取file2.txt的每一行,并使用"${lines[@]}"判断该行是否在数组中存在。如果不在,则将其打印出来。

这个脚本可以在命令行中运行,如下所示:

$ bash script.sh

执行后,脚本将会返回不在file2.txt中的行,并将其打印出来。

总结

这篇文章向程序员介绍了如何使用Bash编写一个程序,该程序可以从一个文件中返回不在另一个文件中的行。我们通过使用mapfile命令和循环来实现这个功能。希望这篇文章能对你有所帮助,以提高你在Shell-Bash编程中的技能。