📌  相关文章
📜  如果列值在另一个文件的列中,则 bash 打印行 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:24:58.815000             🧑  作者: Mango

如果列值在另一个文件的列中,则 bash 打印行 - Shell-Bash

在 Bash 中,有时候我们需要比较两个文件中的列值,以判断它们是否相同。如果相同,我们可能需要打印出这些行。本文将介绍如何在 Bash shell 中实现这个操作。

1. 方法一:使用 awk 命令
awk -F ',' 'NR==FNR{a[$1];next}($1 in a){print}' file2.txt file1.txt

这段代码会从 file2.txt 文件中读取所有行,并将第一列所有的值存储到一个数组 a 中。接下来,它会读取 file1.txt 文件中的所有行,并判断其中的第一列值是否在数组 a 中。如果存在,就打印这一行。

2. 方法二:使用 grep 命令
grep -wFf file2.txt file1.txt

这段代码会从 file2.txt 文件中读取所有行,并将它们作为模式在 file1.txt 文件中进行搜索。如果模式匹配成功,就打印出相应的行。

3. 方法三:使用 join 命令
join -t ',' -1 1 -2 1 file1.txt file2.txt

这段代码会将 file1.txt 文件和 file2.txt 文件中的所有行进行连接操作。连接的依据是两个文件中的第一列相等。如果连接成功,就打印出相应的行。需要注意的是,join 命令要求两个文件都必须是已经排过序的,否则可能会得到错误的结果。

以上就是三种在 Bash shell 中判断一个文件中的列值是否在另一个文件中的操作。使用这些方法,你可以轻松地比较两个文件中的内容,并进行相应的处理。